模板标签是把复杂的PHP语言转换为容易编写和容易记忆的另一种形式的语言。
标签对照
K9模板标签是经过K9模板引擎解析之后完成输出代码。
K9模板标签虽也是用大括号括起来,但和KingCMS v6的标签有一定的区分。见下面的对照表:
HTML标签 | KingCMS v6标签 | K9模板标签 |
---|---|---|
<br/> | {King:Title/} | {$title} |
<img src="images/logo.gif" /> | {King:Title size="3" /} | {$title size="3"} |
<span class="cls" > KingCMS </span> | {king:portal.article listid='3'} {king:title/} {/king:portal.article} | {@res table='%s_user' field='userid,username' where='status=1' order='userid desc'} {#foreach ($res as $rs)} {$rs[username]} {#endforeach} |
模板注释符号约定
K9模板注释为:
<!--- 这里是注释内容部分 --->
两边比HTML注释多一个中划线(3个以上都可以),可以跟HTML注释一样被可视化编辑器默认。
不同点:
<!-- HTML注释 -->
是通过模版引擎编译后会显示出来,K9模板注释不会被显示到客户端浏览器。
模板引用文件约定
引用模板文件- [include 和 require],
{#include file=’include/top.php’}
file是文件路径,其值为相对于当前被应用的模板目录路径。
被引用的文件也会被正常解析标签。
同时可以用require别名,效果同上:
{#require file=’include/top.php’}
具体见:点击这里。
标签属性
size属性
用来设置截取指定长度的文本。
{$title size='10'}
在原{$title}的值中取前10个字符,并且字符长度大于10的时候,补充省略号;size值必须为数字,英文字母按一个字符计算,一个汉字或全角标点符号按两个字符计算,也就是说size=‘10’代表着显示前5个中文汉字或者10个英文字母。
cache属性
数据查询标签专用,可以为每个标签调用的数据设置缓存时间。恰当的运用cache属性是提高模板解析效率的一个捷径。
{@res.search table='%s_content' field='id,title,description,url' fulltext='ft_content' where='status=1' order='temp_score desc,id desc' number='10' cache='600'}{#foreach($res as $rs)} <a href="{DIR}{$rs[url]}">{$rs[title]}</a>{#endforeach}
搜索标签{@res.search}
是cache最常见的情景,属性值,标注*的是必须填写的属性值
* table:要查询的数据库表名
* field:要显示的字段列表,不能用*,必须填写
* fulltext:全文检索字段
where:条件检索
order:排序方式
number:搜索结果每页显示数,默认为20
cache:以秒为单位,设置该标签调用数据的缓存时间
code属性
用来转换数据输出格式。code属性值有:
html(同htmldecode)
quote
url(同urlencode)
nl2br
ip
json
各自的功能如下:
属性值 | 作用 |
---|---|
html | 禁止htmlencode转换,默认是做转换,同:htmldecode |
quote | 删除双引号等,可以用在html属性值里 |
url | urlencode转换,传递URL的时候用到,同:urlencode |
nl2br | 回车符换成<br/>,在html页面中正常显示换行。 |
ip | 把long格式的ip地址转换为 255.255.255.* 样式的地址 |
json | 数组转换为json格式,停止htmlencode转换 |
{$system.bottom code='html'} 或 {$title code='htmldecode'}
默认输出的所有标签是经过htmlencode转换了的,这样可以安全过滤掉用户提交的不安全的html代码,但一些特殊的文本段是不能转换的,比如页脚html代码、统计器代码或html编辑器中提交的内容,这个时候需要指定一下code值为html;必须要区分的是,这个和先前版本的属性的意义是正好相反。
{$title code='quote'}
当标签在html代码属性里需要用到的时候,指定一下quote,以免在数据中带有双引号等特殊符号的时候,发生错误。也可以用php的htmlspecialchars函数,但这个函数会把双引号换成
"
,并不利于SEO优化。举例:<img src="{$image}" alt="{$title code='quote'}"/>
{$_GET- ['q'] code='url'} 或 {$title code='urlencode'}
部分浏览器不支持直接传递中文,这个时候需要做urlencode转换,主要用处是传递到url参数时候用到。
<a href="{DIR}/?q={$_GET- [q] code='url'}">搜索关键词</a>
date属性
日期格式转换。
{$date date="Y-m-d H:i:s"}
格式化时间戳格式的日期为可读的标准日期格式,因为KingCMS的系统中的日期均是以数字形式的时间戳来存储的,输出显示的时候,必须做转换,否则直接读取的是十位数的数字。上面例子中的Ymd依次代表完整年份、月份和日期,详细对照表如下。
format 字符 | 说明 | 返回值例子 |
---|---|---|
日 | — | — |
d | 月份中的第几天,有前导零的 2 位数字 | 01 到 31 |
D | 星期中的第几天,文本表示,3 个字母 | Mon 到 Sun |
j | 月份中的第几天,没有前导零 | 1 到 31 |
l | 星期几,完整的文本格式 | Sunday 到 Saturday |
N | ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) | 1(表示星期一)到 7(表示星期天) |
S | 每月天数后面的英文后缀,2 个字符 | st,nd,rd 或者 th。可以和 j 一起用 |
w | 星期中的第几天,数字表示 | 0(表示星期天)到 6(表示星期六) |
z | 年份中的第几天 | 0 到 366 |
星期 | — | — |
W | ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的) | 例如:42(当年的第 42 周) |
月 | — | — |
F | 月份,完整的文本格式,例如 January 或者 March | January 到 December |
m | 数字表示的月份,有前导零 | 01 到 12 |
M | 三个字母缩写表示的月份 | Jan 到 Dec |
n | 数字表示的月份,没有前导零 | 1 到 12 |
t | 给定月份所应有的天数 | 28 到 31 |
年 | — | — |
L | 是否为闰年 | 如果是闰年为 1,否则为 0 |
o | ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加) | Examples: 1999 or 2003 |
Y | 4 位数字完整表示的年份 | 例如:1999 或 2003 |
y | 2 位数字表示的年份 | 例如:99 或 03 |
时间 | — | — |
a | 小写的上午和下午值 | am 或 pm |
A | 大写的上午和下午值 | AM 或 PM |
B | Swatch Internet 标准时 | 000 到 999 |
g | 小时,12 小时格式,没有前导零 | 1 到 12 |
G | 小时,24 小时格式,没有前导零 | 0 到 23 |
h | 小时,12 小时格式,有前导零 | 01 到 12 |
H | 小时,24 小时格式,有前导零 | 00 到 23 |
i | 有前导零的分钟数 | 00 到 59 |
s | 秒数,有前导零 | 00 到 59 |
时区 | — | — |
e | 时区标识(PHP 5.1.0 新加) | 例如:UTC,GMT,Atlantic/Azores |
I | 是否为夏令时 | 如果是夏令时为 1,否则为 0 |
O | 与格林威治时间相差的小时数 | 例如:+0200 |
T | 本机所在的时区 | 例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如“Eastern Standard Time”,中文版会显示“中国标准时间”)。 |
Z | 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 | -43200 到 43200 |
日期 | — | — |
c | ISO 8601 格式的日期(PHP 5 新加) | 2004-02-12T15:19:21+00:00 |
r | RFC 822 格式的日期 | 例如:Thu, 21 Dec 2000 16:01:07 +0200 |
U | 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 | — |
在格式字串中的字符前加上反斜线来转义可以避免它被按照上表解释。如果加上反斜线后的字符本身就是一个特殊序列,那还要转义反斜线。
pagelist属性
分页标签。
{$res_pagelist code='html'}
此标签默认值为:
<p class="k_pagelist">[$standard][$next]</p>
分页标签只适用于查询类标签,且读取类型为:{$@res.one/get/join/one_join/two/select/select_join/count/search/related}
。
分页标签包含子元素,其对应关系如下:
[$standard] 输出1 2 3 4 5 6 7 8 9 … 198 199 ,带链接的路径
[$next] 输出Next > ,跳到下一页,并不是最后一页的时候,带上链接
[$previous] 输出 < Previous ,跳到前一页,不是在第一页的时候,带上链接
[$first] 输出 << First ,跳到首页,不是第一页的时候,带上链接
[$last] 输出 Last >> ,跳到最后一页, 不是最后一页的时候,带上链接
[$pcount] 总页数
[$count] 记录总数
[$pid] 当前页数
[$rn] 每页显示记录数
生成缩略图属性
缩略图的调用参数
范例:
{$rs[image] width='200' height='400' background='#FFFAAA' }
width:图片缩略图宽度,单位值为px
height:指定缩略图高度
background:指定背景色,当不指定这个URL参数的时候,图片会以中间为中心,裁减多余的图,这个时候需要用到position来定位(见下面);若指定背景色,则自动按比缩小,并且多余的空白处用指定的颜色填充,颜色值必须为标准十六进制颜色值,可以不带#号,如:#EEEEEE 或 FFF000,不支持red等命名形式的颜色值。
position:切图 ,其取值有:
取值 | 作用 |
---|---|
center | 从中心为基点,裁掉左右或上下多出来的部分 |
top | 以顶部为基点,裁掉下面部分 |
left | 以左侧为基点,裁掉右侧部分 |
right | 以右侧为基点,裁掉左侧部分 |
bottom | 以底部为基点,裁掉上面部分 |
lefttop | 以左上角为基点,裁掉右侧和下面多出来的部分,也可以写 |
topleft | 同上,为了防止混淆,top和left部分顺序 |
righttop | 参考上面lefttop和topleft例子 |
leftbottom | 同上 |
bottomleft | 同上 |
X,Y | 除了如上相对定位外,也可以输入坐标值的方法来确定裁图位置 |
padding:画图像边缘线,取值有:
取值 | 作用 |
---|---|
rectangle | 矩形边缘线 |
fillet | 圆倒角边缘线 |
chamfer | 斜倒角边缘线 |
边缘线的子属性有
取值 | 作用 |
---|---|
padding-color | 边缘线的色彩,如:#FF0000 |
padding-size | 边缘线的厚度,默认0 |
padding-r | 当指定为圆角或斜倒角边缘线的时候的半径值 |
padding-filter | 滤镜类型,shadow:阴影 |
padding-filter-color | 滤镜颜色,默认#666666,即深灰色 |
border:边框,边缘线是从外部全部填充指定的进深(padding-size)的结构,边框并不填充外边角。取值同padding
取值 | 作用 |
---|---|
rectangle | 矩形边缘线 |
fillet | 圆倒角边缘线 |
chamfer | 斜倒角边缘线 |
边框的子属性有:
取值 | 作用 |
---|---|
border-color | 边框颜色,默认黑色:#000000 |
border-margin | 边框进深值,默认0 |
border-r | 当边框类型为圆角边框或斜切边框的时候,四个倒角的半径,默认取值为:5 |
border-size | 边框的宽度,默认为1 |
缩略图调用举例[不裁减缩图]
当指定background背景颜色值的时候,做自动缩图处理,边角会以指定的颜色值填充。
background参数值必须为6位长度的数字和A-F的英文字母组合,不接受#等参数,详细色彩值请参考网页颜色表。
{$info[image] width='200' height='150' background='#FFFFFF'}
当循环里调用的时候,如下:
{@data table='%s_content' field='title,image' where='status=1' number='5'}{#foreach($data as $rs)}<img src="{DIR}{$rs[image] width='95' height='60' background='#FFFFFF'}" alt="{$rs['title'] code='quote'}"/>{#endforeach}
缩略图调用举例[自动裁图]
当不指定background值的时候,会做自动裁减处理,默认裁减位置是以图中心为基点,裁减左右和上下相对多出来的图片部分。
{@data table='%s_content' field='title,image' where='status=1' number='5'}{#foreach($data as $rs)} <!--不指定position,切除四周--> <img src="{DIR}{$rs[image] width='200' height='150'}" alt="{$rs[title]}" code='quote'}"/> <!--切除下面--> <img src="{DIR}{$rs[image] width='200' height='150' position='top'}" alt="{$rs[title]}" code='quote'}"/>{#endforeach}
静态标签
静态标签是指KingCMS内部指定的那些PHP常量的标签,比如安装目录的常量参数DIR,在模板中调用的时候是{DIR}
,当前的模板目录的常量参数是T,模板里调用的是{T}
。
当多个常量标签需要连续写的时候,如:{DIR}{T}
,可以简写为:{DIR.T}
。
需要注意的是,常量标签(即静态标签)必须为大写!
{DIR} <!--程序安装目录-->{T} <!--当前模板目录-->{TIMEZONE} <!--时区设置-->{PATH_UP} <!--放置上传文件的主目录-->{PATH_CACHE} <!--放置缓存文件的目录-->{ROOT} <!--网站根目录,磁盘里的路径-->{PROD} <!--程序代号-->{VERSION} <!--程序版本-->{VER} <!--小版本-->{TIME} <!--当前时间-->
变量和数组类型标签
变量类型标签,必须为当前页中可以查询到的标签,否则出现PHP错误。
普通标签,,支持size/code等属性值。如:
{$title}-当前网页标题
{$keywords}-当前网页关键词
{$description}-当前网页meta简述
数组类型变量标签,如:{$_GET[‘title’]}(可简写为:{$_GET[title]})。
系统参数标签,如:{$site.name},带.的是系统内置的参数标签。
其中,更多系统参数标签如下:
{$site.name} <!--网站名称-->{$site.title} <!--网站首页标题-->{$site.keywords} <!--网站首页关键词-->{$site.description code='quote'} <!--网站首页meta简述-->{$system.countcode code='html'} <!--第三方统计代码-->{$system.qq} <!--管理员QQ-->{$system.tel} <!--管理员电话-->{$system.beian} <!--备案号-->{$system.image_width} <!--缩略图最大宽度值-->{$system.image_height} <!--缩略图最大高度值-->{$system.bottom code='html'} <!--网站底部HTML代码-->
运算标签
数据统计[@rs.count]
{@fangwu.count table='%s_fangwu' where='status=1'} {@zhaopin.count table='%s_zhaopin' where='status=1'}
读取后的结果赋值给数组变量{$fangwu}和{$zhaopin}中,直接输出其对应内容。
房屋总计:{$fangwu} 招聘总计:{$zhaopin}
属性值,标注*的是必须填写的属性值
* table:要读取的数据库表名
where:条件检索
语句[foreach循环]
foreach循环标签是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。
{#foreach($data as $rs)} 标题是:{$rs['title']}<br/>{#endforeach}
语句[for循环]
{#for($i=1;$i<=10;$i++)} 当前第{$i} 个值{#endfor}
语句[if判断]
if判断标签允许按照条件执行代码片段。
{#if ($title=="")} 标题为啥为空呢?{#endif}
语句[switch选择]
switch标签和if语句相似,很多场合下需要把同一个变量与很多不同的值做比较,并根据它等于哪个值来执行不同的代码,这正是switch的用处
{#switch ($title)} {#case 'apple'} 苹果 {#break} {#case 'bar'} 梨 {#break} {#default} 标题并不是苹果或梨{#endswitch}
语句[break 退出循环][continue 跳过本循环]
break标签结束当前for、foreach或者switch结构的执行。
continue标签在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。
数据查询标签
[循环读取]{@res}{@res.select}
{@res table='%s_user' field='userid,username' where='status=1' order='userid desc'}
读取后的结果赋值给数组变量{$res}中,循环显示{$res}中的内容,即可实现对数据库表的查询输出。
{#foreach ($res as $rs)} 用户名是:{$rs[username]} <br/>{#endforeach}
属性值,标注*的是必须填写的属性值
* table:要读取的数据库表名
field:需要列出的字段名
where:条件检索
order:排序方式
number:调用数量,如果跳过10条读取5条,则: number=‘10, 5’
需分页时
{@res.select table='%s_user' field='userid,username' where='status=1' order='userid desc' url='/user/'}
url:当前页面第一页的地址,不填写时,系统自动设置。当前内页路径请写:
url="{DIR}{$info['url']}"
。
调用分页列表:{$res_pagelist}
分页列表代码存储到@XXX.select定义里的”XXX”部分名称和”_pagelist”变量里。
[单行读取]{@rs.one}
{@rs.one table='%s_user' where='status=1' order='userid desc'}
读取后的结果赋值给数组变量{$rs}中,直接输出{$rs}数组里的对应内容。
用户名:{$rs[username]} <br/>用户ID:{$rs[userid]}
属性值,标注*的是必须填写的属性值
* table:要读取的数据库表名
field:需要列出的字段名
where:条件检索
order:排序方式
[双值对应读取]{@res.two}
{@res.two table='%s_user' field1='userid' field2='username' where='status=1' order='userid desc'}
读取后的结果赋值给数组变量{$res}中,循环显示{$res}的键值和值即可实现对此数组的输出,此时,field1属性对应的是键值,field2属性对应的是对应值
{#foreach ($res as $userid => $username)} 用户名是:{$username} 用户ID:{$userid} <br/>{#endforeach}
属性值,标注*的是必须填写的属性值
* table:要读取的数据库表名
* field1:作为键值的字段名
* field2:作为键值对应值的字段名
where:条件检索
order:排序方式
number:调用数量,如果跳过10条读取5条,则: number=‘10, 5’
[关联读取]{@res.join}{@res.select_join}
{@res.join table1='%s_content' table2='%s_user' field1='id,title,url' field2='username' on='userid' where='t1.status=1' order='t1.id desc'}
读取表1的时候,同时读取被关联的表里的其他内容,比如上例循环显示的是content表里的数据,同时根据content表里的userid字段关联读取附表user里的username字段,用来显示对应的用户名。
读取返回值是二维数组,赋给数组变量res:
{#foreach ($res as $rs)} 内容标题:{$rs[title]} 用户名是:{$rs[username]} 链接地址:{$rs[url]}<br/>{#endforeach}
属性值,标注*的是必须填写的属性值,+代表必须同时指定或同时不指定
* table1:要读取的主数据库表名
* table2:被关联读取的附数据库表的名称
+ field1:主数据库表里的字段列表
+ field2:附数据库表里的字段列表
* on:关联两个表用的字段,这个字段两个表必须得存在
where:条件检索,主表字段前面需要补充t1.,附表是t2
order:排序方式,主表字段前面需要补充t1.,附表是t2
number:调用数量,如果跳过10条读取5条,则: number=‘10, 5’
需分页的时候
{@res.join table1='%s_content' table2='%s_user' field1='id,title,url' field2='username' on='userid' where='t1.status=1' order='t1.id desc' url='/'}
比{@res.join}
多出一个属性值
url:当前列表第一页的地址,不指定时,系统自动获取
调用分页列表:{$res_pagelist}
分页列表代码存储到@XXX.select定义里的”XXX”部分名称和”_pagelist”变量里。
[关联单行读取]{@rs.one_join}
{@rs.one_join table1='%s_content' table2='%s_user' field1='id,title,url' field2='username' on='userid' where='t1.status=1' order='t1.id desc'}
读取表1的时候,同时读取被关联的表里的其他内容,比如上例循环显示的是content表里的数据,同时根据content表里的userid字段关联读取附表user里的username字段,用来显示对应的用户名。
读取返回值是一维数组,赋给数组变量{$rs}:
内容标题:{$rs[title]}用户名是:{$rs[username]}链接地址:{$rs[url]}
属性值,标注*的是必须填写的属性值,+代表必须同时指定或同时不指定
* table1:要读取的主数据库表名
* table2:被关联读取的附数据库表的名称
+ field1:主数据库表里的字段列表
+ field2:附数据库表里的字段列表
* on:关联两个表用的字段,这个字段两个表必须得存在
where:条件检索,主表字段前面需要补充t1.,附表是t2
order:排序方式,主表字段前面需要补充t1.,附表是t2
[站内搜索引擎]{@res.search}
<div id="search_list">{@res.search table='%s_content' field='id,title,description,url' fulltext='ft_content' where='status=1' order='temp_score desc,id desc' number='10'}{#foreach($res as $rs)}<div> <a href="{DIR}{$rs[url]}">{$rs[title]}</a> <p>{$rs[description]}</p></div>{#endforeach}</div><div>{$res_pagelist code='html'}</div>
读取表中的全文检索字段,并返回最符合条件的搜索结果,支持模糊搜索;本查询系统是基于二元分词法开发制作,仅适用于特定的查询应用。
属性值,标注*的是必须填写的属性值
* table:要查询的数据库表名
* field:要显示的字段列表,不能用*,必须填写
* fulltext:全文检索字段
where:条件检索
order:排序方式
number:搜索结果每页显示数,默认为20
pagelist:分页列表结构,默认为:
<p class="k_pagelist">{$standard}{$next}</p>
欢迎收藏本文绝对链接,以作备查。
本文最后更新日期:2015.01.14
转载请注明出处:唯众网络