ClassCMS
首页
应用
模板助手
捐赠
语法说明
栏目变量
文章调用
文章页面
复制
清空
变量
赋值
{$a=hello world}
输出
{$a}
转义
字符串中包含下属特殊字符,需要进行转义处理,否则系统无法处理带有特殊字符的字符串 \ = , | ( ) 字符串中需要用\号转义特殊字符,如: {$a=ClassCMS真好用(括号内的删除)} 无法将此字符串赋值给$a,系统报错. 需要转义后才能正常运行 {$a=ClassCMS真好用\(括号内的删除\)} {$a}此时才能正确输出$a
判断
判断是否存在变量: 如果变量未定义,直接输出变量值会报错,需要使用if语法与isset函数先提前判断 {if isset($a)} {$a} {/if}
数组
赋值
{$a.title=hello world}
输出
{$a.title}
数值数组
对于不带键名的数组,如 <?php $a=array('a','b','c'); ?> 则可以使用{$a.0}输出
多维数组
多维数组使用,多个.号连接输出 {$a.0.title}
函数
使用
{$a=hello world} 执行函数后直接输出: {str_replace(world,ClassCMS,$a)} 执行函数后赋值给变量: {$b=str_replace(world,ClassCMS,$a)}
串联使用
{$a=hello world} 函数串联使用时使用|连接多个函数,执行时会将上一个函数执行的结果传递给下一个函数使用 {$a=str_replace(world,classcms,hello world)|str_replace(hello,hi,this)} {//此时$a为hi classcms} this代表了上一个函数的执行结果,如不附带this,当前执行函数的第一个参数为上一个函数的执行结果
语法
if 判断
if语法可以判断变量,函数返回值等,具体语法可以参考php if语法. 常用比较运算符:== 等于,!= 不等于,<> 不等于,> 大于,< 小于,>= 大于或等于,<= 小于或等于 {$a=1} {if $a==1} a等于1 {elseif $a==2} a等于2 {elseif $a==3 || $a==4} a等于3或4 {else} a不等于1,2,3,4 {/if} 简化判断,不需要比较运算符 {if $a} 当$a不为空或0或空数组时,判断成立 {/if}
file 文件包含
一个网站模板中经常有共用的部分,如网站导航,底部信息等. 可以将共用的代码独立放到一个文件中,在需要调用的地方使用file语法引入. {file header} {file common/top} {//引入common目录下的top.php文件} {file /top} {//引入模板根目录中的top.php文件} {file ../top} {//引入上级目录中的top.php文件}
loop 循环
loop语法可以输出数组列表,常用在文章列表,栏目列表的输出. <?php $a=array('a','b','c','d'); ?> 对于以上数组则可以使用以下代码进行循环输出: {loop $a as $key=>$val} 键名:{$key},值:{$val}. {/loop} 以上代码输出的结果为(数组中的第一个元素的键名从0开始) 0,a. 1,b. 2,c. 3,d. 在数组循环中判断 {loop $a as $key=>$val} {if $key==0} 第一个:{$val}. {elseif $key==1} 第二个:{$val}. {elseif $key==count($a)-1} 最后一个:{$val}. {else} 其他:{$val}. {/if} {/loop} {loop $a as $key=>$val} {if ($key+1)%3==0} 每3条输出信息 {/if} {/loop}
template 目录
模板中需要引用图片,文件等资源需要调用当前应用下的模板目录路径,可以使用template语法输出目录名. 如当前应用是test123,当test123下属的模板使用以下代码,将输出模板路径 {template} 输出 /class/test/ 如当前应用配置了template_dir 则系统会自动加上template_dir的值 如template_dir=template {template} 输出 /class/test/template/ 使用图片 <img src="{template}images/logo.png"> 使用js <script src="{template}js/js.js"></script> 使用css <link rel="stylesheet" href="{template}css/style.css"> 其它应用的模板目录 <script src="{template layui}layui.js"></script>
php 标记
{php} echo('ClassCMS');{/php} 4.5版本起支持
应用方法调用
应用方法调用语法,通过此语法可以调用系统中所有应用的方法. {cms:channel:get(5)} {//获取栏目id为5的栏目信息} {$channel=cms:channel:get(10)} {//获取栏目id为5的栏目信息,并赋值给$channel} {var_dump($channel)} {//输出栏目数组信息} 调用当前应用下的方法,可以使用this代替应用hash. 如当前应用为template,{this:myfunction()} 此代码会调用template:myfunction方法 调用当前应用,test模块内的myfunction方法: {this:test:myfunction()} 应用方法也支持串联调用如: {cms:common:ip()|cms:common:text(3)} 输出当前访客ip字符串的前3个字符
注释
{//这是一条注释} 注释不会显示在网页中
换行
12345{br}67890,查看网页源代码时,能看到代码换行了
当前栏目
栏目信息
栏目id:{$.id} 栏目名:{$.channelname} 栏目网址:{$.link}
栏目变量
栏目标题:{$.title} 如当前栏目未定义title变量则会报错,建议先使用if与isset判断是否存在此变量 {if isset($.title)}{$.title}{/if} 也可以通过栏目标量名调用: {$.标题}
标题关键词描述
<title>{if isset($title)}{$title}{elseif isset($.title) && !empty($.title)}{$.title}{else}{$.channelname}{/if}</title> {if isset($keywords)}<meta name="keywords" content="{$keywords}">{br}{elseif isset($.keywords)}<meta name="keywords" content="{$.keywords}">{br}{/if} {if isset($description)}<meta name="description" content="{$description}">{br}{elseif isset($.description)}<meta name="description" content="{$.description}">{br}{/if}
编辑变量
{$channelid=$.id} <?php C('cms:article:setVar',$channelid,'title','新的栏目标题'); ?>
首页栏目
首页信息
首页网址:{$.0.link} 首页栏目名:{$.0.channelname} 如只在首页模板中调用首页的变量可以直接用{$.title} 如需要在其他模板中调用首页的信息,则使用{$.0.title} 如需要其它的首页变量,如首页简介等,则只需在后台添加即可 ClassCMS中自动默认排序第一位的为首页栏目
标题关键词描述
<title>{$.title}</title> {if isset($.keywords)}<meta name="keywords" content="{$.keywords}">{br}{/if} {if isset($.description)}<meta name="description" content="{$.description}">{br}{/if}
其他栏目
栏目信息
栏目ID为3的栏目名:{$.3.channelname} 栏目ID为3的栏目标题:{$.3.title} 栏目ID为3的栏目网址:{$.3.link}
通过栏目名调用
栏目名为公司介绍的栏目标题:{$.公司介绍.title} 栏目名为公司介绍的栏目网址:{$.公司介绍.link} 注意:通过栏目名调用时,如果存在同名栏目则只会调用第一个栏目
栏目调用
父栏目
{$.fid} 为上级栏目id,根据上级栏目id可以获取上级栏目信息 {$parent=cms:channel:get($.fid)} 父栏目名:{$parent.channelname} 父栏目网址:{$parent.link}
所有父栏目
{$parents=cms:channel:parents($.id)} {//获取当前栏目所有父栏目列表数组} {loop $parents as $parent} {$parent.link}/{$parent.channelname}<br> {/loop}
顶级栏目
{$parents=cms:channel:top($.id)} {//获取当前栏目的顶级栏目,如不存在顶级栏目则返回false} 顶级栏目名:{$parents.channelname} 顶级栏目网址:{$parents.link}
栏目导航
使用nav函数获取栏目列表 {loop nav() as $nav} <a class="{if $nav.active} active{/if}" href="{$nav.link}">{$nav.channelname}</a> {/loop} {loop nav() as $nav} <a class="{if $nav.active} active{/if}" href="{$nav.link}">{$nav.channelname}</a> 栏目循环时亦可输出栏目变量,如:{$nav.keywords},{$nav.content} {/loop} {loop nav(2,8) as $nav} {//获取id为2的栏目下属列表,id为0则获取顶级栏目,并限定显示数量为8} <a class="{if $nav.active} active{/if}" href="{$nav.link}">{$nav.channelname}</a> {/loop}
二级导航
直接循环输出子栏目: {loop nav() as $nav} <br><a href="{$nav.link}" class="{if $nav.active} active{/if}">{$nav.channelname}</a> {loop nav($nav.id) as $nav2} 子栏目:<a href="{$nav2.link}" class="{if $nav2.active} active{/if}">{$nav2.channelname}</a> {/loop} {/loop} 先判断是否有子栏目后再循环输出子栏目: {loop nav() as $nav} <a href="{$nav.link}" class="{if $nav.active} active{/if}">{$nav.channelname}</a> {$nav2s=nav($nav.id)} {if count($nav2s)} 子栏目: {loop $nav2s as $nav2} <a href="{$nav2.link}" class="{if $nav2.active} active{/if}">{$nav2.channelname}</a> | {/loop} {/if} <br> {/loop}
左侧导航
{$navs=nav($.id)}{//获取当前栏目下属栏目列表} {if count($navs)}{//如果拥有下属栏目} 子栏目: {loop $navs as $nav} <a class="{if $nav.active} active{/if}" href="{$nav.link}">{$nav.channelname}</a> {/loop} {elseif $.fid==0} {//如果没有下属栏目并且当前栏目是一级栏目,则不显示任何内容} {else}{//显示兄弟栏目} {$navs=nav($.fid)}{//获取兄弟栏目列表} {if count($navs)} 栏目: {loop $navs as $nav} <a class="{if $nav.active} active{/if}" href="{$nav.link}">{$nav.channelname}</a> {/loop} {/if} {/if}
面包屑
自动自带bread函数,用来获取栏目面包屑导航. 当前栏目面包屑导航 {loop bread() as $bread} <a href="{$bread.link}">{$bread.channelname}</a> {/loop} 判断是否为首页: {loop bread() as $key=>$bread} {if $key} <a href="{$bread.link}">{$bread.channelname}</a> {else} 第一项: <span>{$bread.channelname}</span> {/if} {/loop} 判断最后一个栏目: {$breads=bread()} {loop $breads as $key=>$bread} {$breadkeys=array_keys($breads)} {if end($breadkeys)==$key} 最后一项:<span>{$bread.channelname}</span> {else} <a href="{$bread.link}">{$bread.channelname}</a> {/if} {/loop}
基础调用
当前栏目
调用当前栏目的文章,文章数量默认为10篇,如当前栏目有pagesize变量,则默认文章调用数量为pagesize值 {loop a() as $article} 文章标题:{$article.title} 文章网址:{$article.link} {br} {/loop} 指定调用条数 {loop a('pagesize',5) as $article} 文章标题:{$article.title} 文章网址:{$article.link} {/loop} 调用link模型下,字段enabled=1的所有文章 {loop a('modulehash','link','where.enabled',1) as $article} 文章标题:{$article.title} 文章网址:{$article.link} {/loop}
其他栏目
{loop a('cid',1,'pagesize',5) as $article} 文章标题:{$article.title} 文章网址:{$article.link} {/loop} 调用id为1的栏目内的5篇文章
数组参数调用
{$test=array()} {$test.cid=1} {$test.pagesize=5} {$articles=a($test)} {loop $articles as $article} {$article.title} {/loop} 查询到的文章数量:{count($articles)} 复杂的查询推荐使用此方法,注意数组变量名不要与其他文章查询重复,或者在查询前,初始化数组 {$test=array()}
单篇调用
调用单篇文章,使用cms:article:getOne,返回的值为文章字段数组 {$test.cid=3} {$article=cms:article:getOne($test)} 文章标题:{$article.title} 文章链接:{$article.link} 可以使用print_r打印出所有字段 <?php print_r($article); ?>
常用参数
cid
目标栏目的id,只调用该栏目下的文章,如cid不为数字,则调用此栏目名下的文章 如果不附带此参数,则cid为当前栏目的id. {$test.cid=1} {$articles=a($test)}
cids
同时调用多个目标栏目下的文章,这些栏目必须是同一个模型的下属栏目,使用英文';'号分隔 如果目标栏目已经禁用则不会调用下属文章 {$test.cids=1;2;3} {$articles=a($test)} 同时调用已禁用栏目的文章: {$test.enabled=0} {$test.cids=1;2;3} {$articles=a($test)}
modulehash
调用目标模型标识下所有的文章 如果模型下属某个栏目已禁用则不会调用栏目内的文章 {$test.modulehash=news} {$articles=a($test)} 同时调用已禁用栏目的文章: {$test.enabled=0} {$test.modulehash=news} {$articles=a($test)}
all
下属栏目的文章,默认为0 =0时只获取本栏目文章 =1时获取自身与下属栏目的文章 =2时只获取下属栏目的文章. {$test.all=1} {$articles=a($test)}
order
文章排序,默认为id desc 如当前栏目拥有变量order,则order为当前栏目变量的order值 {$test.order=id asc} {$articles=a($test)} 按时间排序 {$test.order=datetime desc} {$articles=a($test)} 随机排序 {$test.order=rand} {$articles=a($test)}
pagesize
文章数量,默认为10 如当前栏目有pagesize变量,则默认文章调用数量为pagesize值 {$test.pagesize=8} {$articles=a($test)} 调用所有文章 {$test.pagesize=0} {$articles=a($test)} 调用文章总数 {$test.pagesize=0} {$test.column=id} {$articles=a($test)} 文章数量:{count($articles)}
start
文章查询起始行数 {$test.start=2} {$articles=a($test)}
条件参数
等于
查询id等于1的文章 {$test.where.id=1} {$articles=a($test)}
或
id=1或2或3的文章 {$test.where.id[]=1} {$test.where.id[]=2} {$test.where.id[]=3} {$articles=a($test)}
不等于
id不等于1的文章(需通过原生语法实现) <?php $test['where']['id<>']=1; ?> {$articles=a($test)} 图片不为空: <?php $test['where']['pic<>']=''; ?> {$articles=a($test)} id不等于1或2或3的文章 <?php $test['where']['id<>'][]=1; $test['where']['id<>'][]=2; $test['where']['id<>'][]=3; ?>
大于小于
id大于1的文章 <?php $test['where']['id>']=1; ?> {$articles=a($test)} id小于10的文章 <?php $test['where']['id<']=10; ?> {$articles=a($test)}
搜索
查询文章标题带classcms的文章 <?php $test['where']['title%']='classcms'; ?> {$articles=a($test)} 更多搜索条件请查询文档中 SQL语法 where 查询条件
分页调用
分页
文章列表页一般需要开启分页,查询文章列表时使用page参数,开启分页查询. {//第一个page为参数名,第二个page为网址中的页码名} {$test.page=page} {$articles=a($test)} {loop $articles as $article} {$article.title} {/loop} 默认栏目的分页页面标识为list,栏目的分页页面网址格式为:/($.id)/page_(page).html (page)为分页的页码名 指定调用第二页: {$test.page=2} {$articles=a($test)} {loop $articles as $article} {$article.title} {/loop}
页码输出
开启分页之后,可以通过pagelist函数获取分页页面数组 {$pages=pagelist()} {loop $pages as $page} <a href="{$page.link}" class="{$page.class}">{$page.title}</a> {/loop}
分页信息
开启分页之后,可以通过pageinfo函数获取分页信息(如:页面总数,首页末页地址等,方便自定义分页).注意:只有使用pagelist函数后,pageinfo才能获取分页信息 {$pageinfo=pageinfo()} 单页显示数量:{$pageinfo.pagesize} 当前页面:{$pageinfo.page} 文章数量:{$pageinfo.article} 首页地址:{$pageinfo.channelurl} 当前页面网址:网址{$pageinfo.now.link} 首页地址:{$pageinfo.first.link} 末页地址:{$pageinfo.last.link} 上一页地址:{$pageinfo.prev.link} 下一页地址:{$pageinfo.next.link} 注意:上一页下一页有可能不存在,需要先使用isset判断
字段格式化
文本截断
{loop $articles as $article} {text($article.title,10,...)} {//只显示文章标题的前10个字符} {/loop}
日期格式化
{loop $articles as $article} {date(Y-m-d H:i:s,$article.datetime)} {/loop}
多图输出
{loop $articles as $article} {$pics=explode(;,$article.pics)|array_filter()} {loop $pics as $pic} {$pic} {/loop} {/loop} 仅显示第一张图片: {loop $articles as $article} {$pics=explode(;,$article.pics)|array_filter()} {if count($pics)} {loop $pics as $key=>$pic} {if $key==0} 第一张图片:{$pic} {/if} {/loop} {else} 无图片 {/if} {/loop}
输出
字段
栏目文章页中,系统会自动查找匹配到当前文章,可以直接使用{$xxx}输出文章的字段 如: 文章网址:{$link} 文章标题:{$title} 文章内容:{$content} 文章作者ID:{$uid} 如不确定是否存在某个字段,建议先用isset判断
标题关键词描述
<title>{if isset($title)}{$title}{/if}</title>{br} {if isset($keywords)}<meta name="keywords" content="{$keywords}">{br}{/if} {if isset($description)}<meta name="description" content="{$description}">{br}{/if}
日期格式化
{date(Y-m-d H:i:s,$datetime)}
多图输出
{$pics=explode(;,$pics)|array_filter()} {loop $pics as $pic} {$pic} {/loop}
其它
上一篇下一篇
此方法只能应用于按照id排序的方式获取上下篇的文章 {$prevquery.cid=$cid} {$prevquery.order=id asc} <?php $prevquery['where']['id>']=$id; ?> {$prev=cms:article:getOne($prevquery)} {if $prev} 上一篇:<a href="{$prev.link}">{$prev.title}</a> {else} 上一篇:不存在 {/if} {$nextquery.cid=$cid} {$nextquery.order=id desc} <?php $nextquery['where']['id<']=$id; ?> {$next=cms:article:getOne($nextquery)} {if $next} 下一篇:<a href="{$next.link}">{$next.title}</a> {else} 下一篇:不存在 {/if}
编辑文章
<?php $edit=array(); $edit['cid']=$cid;//当前文章栏目id $edit['id']=$id;//当前文章的id $edit['title']='新文章标题';//修改为新标题 $edit['viewcount']=$viewcount+1;//访问次数+1,需先加此字段 C('cms:article:edit',$edit); ?>