模板制作教程:模板语法
模板引用
对于网站头部、尾部、页面侧边导航等公共部分可以引用过来,以免每个页面都去编写这些公共页面
模板引用是在本模板中引用公共模板,例如引用公共的头部和底部一样。
上图就是首页页面结构,实际上是把头部、中间、底部代码用三个模板文件分开,这样做的好处就是内页也可以调用head.html和foot.html。
1、引用本目录下的xxx.html,当本目录不存在时会引用主目录下的xxx.html
{template "xxx.html"}
2、强制引用主目录下的xxx.html
{template "xxx.html", "/"}
3、强制引用用户目录下的xxx.html
{template "xxx.html", "member"}
基本语法
语法格式:{标签}
标签必须存在于{ }之间,模板中支持PHP标签
错误的标签写法
错误1、css混用
很多人喜欢把css之间写在页面里面,如下面所示:
这种写法是不规范的,需要将上面修改成:
也就是说将{}前后加一个空格便能区分开来
还可以改成:
{code} {/code}
code标签可以把代码保护起来
错误2、js混用
把js写页面是很常见的,如下面所示:
这些写法同样是不规范的,需要修改成:
和上面一样为了区分{}标签
变量、常量、数组
一、变量
{$变量名}
例1、输出变量
{$test}表示输出test变量
例2、变量计算
{$test+1}表示test变量加了一个1,再输出
二、常量
{大写字母}
常量是固定的值,输出常量{SITE_URL}
三、数组
{$数组名[键1]}、{$数组名[键1][键2]}、...
四、简易数组
{$数组名.键1}、{$数组名.键2} (最多支持3级,最好直接输出)
判断语句
格式一
{if $模板变量 运算符 $模板变量}
模板内容
{/if}
{if $aaa != $bbb}
表示前面变量值不等于后面值
{/if}
格式二
{if $模板变量1 运算符 $模板变量}
模板内容1
{else}
模板内容2
{/if}
{if $aaa != $bbb}
表示前面变量值不等于后面值
{else}
表示反之状态,也就是相等了
{/if}
格式三
{if $模板变量1 运算符 $模板变量2}
模板内容1
{else if $模板变量1 运算符 $模板变量3}
模板内容2
{else}
模板内容3
{/if}
{if $aaa == $bbb}
表示前面变量值不等于后面值
{elseif $aaa == $ccc}
表示前面变量值不等于后面值
{else}
表示除此之外
{/if}
格式四
{if $模板变量}
表示变量存在值
{else}
表示变量不存在值
{/if}
{if $aaa}
表示变量存在值
{else}
表示反之状态,表示变量不存在值
{/if}
这里的运算符支持:> 、< 、>= 、<=、==、!= 、<>
也可以使用php语法直接判断
Loop循环语句
主要用于数组循环,loop循环实质上是foreach循环
一、常规输出
格式一
{loop $模板数组 $数组键 $值变量} 执行语句 {/loop}
格式二
{loop $模板数组 $值变量} 执行语句 {/loop}
二、控制循环数量
array_slice() 函数在数组中根据条件取出一段值,并返回。
array_slice(array,start,length,preserve)
参数 | 描述 |
---|---|
array | 必需。规定数组。 |
start | 必需。数值。规定取出元素的开始位置。 0 = 第一个元素。 如果该值设置为正数,则从前往后开始取。 如果该值设置为负数,则从后向前取 start 绝对值。 -2 意味着从数组的倒数第二个元素开始。 |
length | 可选。数值。规定被返回数组的长度。 如果该值设置为整数,则返回该数量的元素。 如果该值设置为负数,则函数将在举例数组末端这么远的地方终止取出。 如果该值未设置,则返回从 start 参数设置的位置开始直到数组末端的所有元素。 |
preserve | 可选。规定函数是保留键名还是重置键名。可能的值:
|
实例:从第一个元素开启,只循环3次
{php $arr = array_slice($模板数组, 0, 3);} {loop $arr $值变量} 执行语句 {/loop}
三、输出循环计数值
计数变量从0开始
{loop $模板数组 $值变量} 执行语句 当前条数:{$key_值变量} {/loop} 总条数:{$count_值变量}
实例:
{loop $arr $a} 当前条数:{$key_a+1} 判断第一条: {if $key_a == 0}表示第一条{/if} 判断最后一条: {if $count_a == $key_a+1}表示最后一条 {/if} --v4.5.2及以上版本支持以下算法-- 判断第一条: {if $is_first}表示第一条{/if} 判断最后一条: {if $is_last}表示最后一条 {/if} {/loop} 总条数:{$count_a}
内容阅读数调用 dr_show_hits
阅读数统计方式是按访客访问一次计算一次,同一个访客刷新页面不加入计算(简单的防止刷次数)
1、show.html调用代码
阅读量代码:
{dr_show_hits($id)}
显示数字就表示成功了。
当内容的点击量均为0,不统计的情况下。
可能是你没有加载关键js文件:
https://www.xunruicms.com/doc/627.html
----------------
如果不想启用防止刷次数功能,一直统计的代码:
{dr_rp(dr_show_hits($id), "&m=hits&", "&m=hits&qx=1&")}
2、列表页循环体内调用代码:
{dr_show_hits($t.id)}
t.是循环体前缀,需要根据实际情况修改
--------------
列表不建议使用统计次数功能,会产生大量ajax请求,导致服务器资源消耗
3、首页循环体内调用代码:
{dr_show_hits($t.id, '', '这里填写模块的目录')}
t.是循环体前缀,需要根据实际情况修改
--------------
列表不建议使用统计次数功能,会产生大量ajax请求,导致服务器资源消耗
4、自定义BOM的显示代码:
{dr_show_hits($id, 'class属性', '这里填写模块的目录')}
例如:
0{dr_show_hits($id, 'my'.$id)}
版本v4.5.2以后不需要填写id参数,改进为:
0{dr_show_hits($id, 'my'.$id)}
-------------------------------------
如果没有jquery支撑的话,可以使用ajax模式来请求获取数量:
$.ajax({ type: "GET", url:"/index.php?s=api&c=module&siteid=1&app=news&m=hits&id=766", dataType: "jsonp", success: function(data){ if (data.code) { $(".dr_show_hits_766").html(data.msg); } else { dr_tips(0, data.msg); } } });
模板代码保护code标签/模板代码格式化
保护的作用是防止代码被模板引擎所解析,一般用在style的css和script的js语句范围,
代码语法如下:
{code}保护内容{/code}
将模板文件放到宸逸cms之前需要把原来的html文件的代码格式化一次,用这个工具:http://tool.chinaz.com/tools/jsformat.aspx
例如:
其中{alert就会被cms的模板引擎解析为cms的函数了,导致出现系统故障,那么可以改进为:
{code} {/code}
还有种情况是在模板中直接写cms的标签,例如:
示例语法:{$title}
那么,正常情况下,{$title}会作为一个变量输出在网页中的,现实中需要直接原样显示,所以,这时候需要用到代码保护标签:
{code}示例语法:{$title}{/code}
到达原样显示的效果。
模板代码注释note标签
在宸逸模板中使用的注释标签语法:
模板代码注释内容不会被模板所显示,作为注释功能,代码语法如下:
{note}注释内容{/note}
这句不会出现在网页中,只会在模板里面显示,方便开发者设计模板
一般开发者使用习惯性的注释语法:
那么可以改进为:
模板语法错误
模板语法错误的时候,需要采用最传统的方式来排查,首先找到对应的模板文件,例如****.html
然后打开这个模板文件,一行行的排除法,删除全部宸逸的标签,每段排除法找问题
空循环标签empty
空循环标签empty 是针对循环标签查询结果为空时,执行的显示内容
语法格式:
将循环标签的结束标签,替换为:
{empty} 表示没有查询到数据显示的区域 {/empty}
1、module标签为例,当查询文章news模块没有数据时显示提示文字:
{module module=news num=10} {$t.title} // 正常显示标题 {empty} 表示没有查询到数据显示的区域 {/empty} 完毕
当配合循环判断时,写在后方,正常默认情况是以{/module}结尾,现在直接改成 {empty}xxx{/empty} 结尾。
2、loop循环为例
{loop $aaa $bbb} {$bbb} // 正常显示标题 {empty} 表示没有查询到数据显示的区域 {/empty} 完毕