11.JIEQI CMS模板 - 2.赋值变量形式
二、赋值变量形式
1、任何变量必须是 $ 符号开头的一个只能包含英文数字和下划线的字符串,如 {?$my_var?}。
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('var', 'test string');
模板:
{?$var?}
输出:
test string
---------------------------------------------------------------------
2、变量如果是数组的话,模板里面可以这样表示,如 {?$ary['key']?}、{?$ary['0']['1']?}。方括号里面变量要加上单引号。另外还支持一种表示方法,上面的两个变量可写成 {?$ary.key?}、{?$ary.0.1?}。一般建议使用前一种,比较符合编程规范。
例子:
---------------------------------------------------------------------
程序:
$ary = array('a'=>'str_a', 'b'=>'str_b', 'c'=>array('0'=>'c_0', '1'=>'c_1'));
$jieqiTpl->assign('ary', $ary);
模板:
{?$ary['a']?} | {?$ary.b?} | {?$ary['c']['1']
输出:
str_a | str_b | c_1
---------------------------------------------------------------------
3、如果变量是数组时候,里面的键值也是变量,则可以写成 {?$ary[$key]?}
例子:
---------------------------------------------------------------------
程序:
$key = 'b';
$ary = array('a'=>'str_a', 'b'=>'str_b');
$jieqiTpl->assign('key', $key);
$jieqiTpl->assign('ary', $ary);
模板:
{?$ary[$key]?}
输出:
str_b
12.JIEQI CMS模板 - 3.变量调节器
三、变量调节器
模板变量支持多种调节函数来改变输出效果,模板标签格式为 {?$var|function:var1:var2?}
变量名之后用 |分隔,然后是函数名字,再后面是函数的参数,每个参数用 : 分隔,参数是字符串时候建议用双引号来包括。
常用变量调节器如下:
1、truncate - 截取固定长度字符串,参数一(必要):截取后长度,参数二:附加字符串。
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('var', '123456789');
模板:
{?$var|truncate:5?} | {?$var|truncate:5:".."?}
输出:
12345 | 123..
---------------------------------------------------------------------
2、subdirectory - JIEQI CMS 里面专用于生成子目录名字的函数,针对数字的处理,无参数。输出格式类似 "/12",其中"/" 是表示开始一个子目录,"12"是子目录名字。
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('id', 3456);
模板:
/files/article/html{?$id|subdirectory?}/{$id?}/index.html
输出:
/files/article/html/3/3456/index.html
---------------------------------------------------------------------
3、date - 把数字类型的时间格式化成字符串,参数一:格式化字符串
格式化字符含义主要有以下几个:
Y - 四位的年份,如 2007
y - 二位年份,如 07
m - 二位月份,不足补零,从 01 到 12
n - 月份,不补零,从 1 到 12
d - 二位的天数,不足补零,从 01 到 31
j - 天数, 不补零, 从 1 到 31
H - 二位24小时格式,从 00 到 24
h - 二位12小时格式,从 00 到 12
G - 24小时格式,从 0 到 24
g - 12 小时格式,从 0 到 12
i - 二位分数,从 00 到 59
s - 二位秒数,从 00 到 59
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('time', 1198226131);
模板:
{?$time|date:"Y-m-d H:i:s"?}
输出:
2007-12-21 16:35:31
---------------------------------------------------------------------
4、str_replace - 字符串替换,参数一:查找的字符串,参数二:替换为字符串
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('var', 'http://www.jieqi.com');
模板:
{?$var|str_replace:"www":"demo"?}
输出:
http://demo.jieqi.com
---------------------------------------------------------------------
5、urlencod,urldecode - 分别是把字符串进行url编码和解码,于在url传递变量情况,无参数
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('var', 'http://www.jieqi.com');
模板:
{?$var|urlencode?}
输出:
http%3A%2F%2Fwww.jieqi.com
---------------------------------------------------------------------
6、strlen - 计算字符串长度,无参数
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('var', 'abcd');
模板:
{?$var|strlen?}
输出:
4
---------------------------------------------------------------------
7、default - 变量为空的时候默认输出的值,参数一:默认值
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('var', 'abcd');
$jieqiTpl->assign('var1', '');
模板:
{?$var|default:"empty"?} | {?$var1|default:"empty"?}
输出:
abcd | empty
---------------------------------------------------------------------
8、sprintf - 格式化输出,参数一:格式化规则
本函数参数是一个字符串,里面可以是任意要输出的字符串,用 % + 类型标志 来表示当前变量格式
常用格式为
%d - 表示数字类型
%06d - 表示显示6位长度的数字类型,位数补足前面补0
%s - 表示字符串类型
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('var', 123);
模板:
{?$var|sprintf:"%06d"?} | {?$var1|sprintf:"The number is %s"?}
输出:
000123 | The number is 123
13.JIEQI CMS模板 - 4.判断语句
四、判断语句
模板里面的断语句主要由 {?if ...?},{?else?}, {?elseif ...?} 和 {?/if?} 这几个标记配合比较语句组成。
一个完整判断语句由 {?if ...?} 开头 {?/if?} 结束,比较符号包括 ==(等于),!=(不等于),>(大于),<(小于),<=(小于等于),>=(大于等于)。
判断语句里面支持简单的四则运算,包括 +(加),-(减), *(乘), /(除), %(取余)。
例子:
---------------------------------------------------------------------
程序:
$jieqiTpl->assign('var', 50);
模板:
{?if $var > 40?}big{?else?}small{?/if?}
{?if $var % 5 == 0?}yes{?else?}no{?/if?}
输出:
big
yes
15.JIEQI CMS模板 - 5.循环语句
五、循环语句
循环语句由 {?section name=i loop=$var columns=1?} 开头,{?/section?} 结束。
name=i 的 i 是循环时候的中间变量名(名称可以自由设置,不能和其他变量同名)。
loop=$var 的 $var 是实际内容数组。
columns=1 的 1 是指循环的时候分成几列,可以不写这部分,默认为一列。这个参数主要用于生成多行多列的表格,当这个参数大于1的时候,程序会自动把循环次数补足成列的倍数。比如内容数组一共有6个值,默认循环六次,如果要生成四列的表格,那么循环就会变成8次,这样正好生成4列2行的表格。
在实际使用中,name 后面的变量也会被转换成一个数组,在每次循环里面会相应赋值。如前面的写法,模板里面变量标签是 $i 的一个数组,包含以下内容
固定参数部分:
$i['columns'] - 当前循环是几列的模式。
$i['count'] - 内容数组的单元个数
$i['addrows'] - 多列的时候,附加的循环次数
$i['loops'] - 总的循环次数
循环变量部分:
$i['key'] - 当前数组单元的键值。
$i['value'] - 当前数组单元内容
$i['index'] - 循环的内部序号,从0开始,逐个递增
$i['order'] - 循环的排序,从1开始,逐个递增
$i['row'] - 当前是第几行,从1开始
$i['column'] - 当前是第几列,从1开始
$i['append'] - 当前循环是不是附加循环,0 表示否,1 表示是
例子1:单列循环
---------------------------------------------------------------------
程序:
$var=array('a', 'b', 'c', 'd', 'e');
$jieqiTpl->assign('var', $var);
模板:
{?section name=i loop=$var?}
($var[$i['key']])
{?/section?}
输出:
(a)(b)(c)(d)(e)
备注:上面 $var[$i['key']],$i['value'] 这两种方式表达的值是一样的,另外兼容老版的表达方式 $var[i]
---------------------------------------------------------------------
例子2:多列循环
---------------------------------------------------------------------
程序:
$var=array('a', 'b', 'c', 'd', 'e');
$jieqiTpl->assign('var', $var);
模板:
<table width="100%" border="1">
{?section name=i loop=$var columns=3?}
{?if $i['column'] == 1?}<tr>{?/if?}
<td>{?$i['order']?}.{?if $i['append'] == 0?}{?$var[$i['key']]?}{?else?} {?/if?}</td>
{?if $i['column'] == $i['columns']?}</tr>{?/if?}
{?/section?}
</table>
输出:
<table width="100%" border="1">
<tr>
<td>1.a</td>
<td>2.b</td>
<td>3.c</td>
</tr>
<tr>
<td>4.d</td>
<td>5.e</td>
<td>6. </td>
</tr>
</table>
备注:
{?section name=i loop=$var columns=3?} 开始循环,按照3列的模式生成
{?if $i['column'] == 1?}<tr>{?/if?} 每行开始第一列时候,前面加上 <tr> 标记
{?if $i['column'] == $i['columns']?}</tr>{?/if?} 每行到最后一列时候,后面加上 </tr> 标记
{?$i['order']?} 数字序号,从1开始递增
{?if $i['append'] == 0?}{?$var[$i['key']]?}{?else?} {?/if?} 如果不是附加字段,则直接输出内容,否则输出
16.JIEQI CMS模板 - 6.页面显示相关配置
六、页面显示相关配置
JIEQI CMS 里面一个页面通常可以有三部分组成,页面框架、主体内容和一定数量的区块。
1、页面框架用于确定整体页面格局,主要包含了页面顶部内容(如:logo、banner、导航链接)、页面底部内容(如:网站声明)、以及中间内容部分的结构(如:分成左中右三列)。系统默认所有的动态程序页面输出都使用同一个框架模板,这样的好处是整站风格统一,并且比较容易修改。
默认的框架模板在网站的 /themes 目录下,每个子目录表示一种网站风格,系统使用那种风格,在后台系统定义里面把风格名称设置成子目录名即可(如:jieqidiv)。
一套标准的风格模板主要包含以下几个文件:
theme.html - 页面框架模板,适用整个系统,修改网站风格也主要是修改本文件。
style.css - 通用的css,在theme.html里面调用的,也是整站通用。
jumppage.html - 程序跳转页面模板,比如用户登录时候,那个跳转过渡的小窗口。
msgbox.html - 内容提示方块模板,通常这个提示信息是指插入到其他页面的。
msgwin.html - 内容提示页面模板,跟msgbox.html不同,这是一个完整的提示页面。
msgerr.html - 错误信息提示模板,也是一个完整的提示页面。
2、主体内容部分是指本页面主要显示的数据,通常用一个单独的模板。如用户登录后,打开个人资料页面,个人资料的表格就是主体内容部分,头尾都套用页面框架,而左侧的“用户设置”、“短消息”、“工具箱”则是本页调用的区块。
主体内容模板,系统功能部分模板就在网站的 /templates 目录下,而其他模块的模板在 /modules/模块名/templates 目录,如小说连载模块是 /modules/article/templates, 论坛模块是 、/templates/forum/templates。
内容模板的命名规则基本和对应的程序相关联,后缀名是 .html
如:
/userdetail.php 对应模板 /templates/userdetail.html
/modules/article/articleinfo.php 对应模板 /modules/article/templates/articleinfo.html
3、区块是一些内容小方块,如果用户登录区块,排行榜区块。所有区块都允许在网站任何页面调用。在一个页面调用区块主要有三种模式:
3.1 标准的框架 + 区块配置文件:这种是默认的显示模式,框架部分使用系统默认的,而一个页面显示几个区块和区块放在什么位置皆在区块配置文件之中。调整区块位置和区块数量只需要调整这个配置文件。
3.2 定制的页面模板 + 区块配置文件:这种模式调用哪几个区块仍旧在区块配置文件中,而区块显示位置由模板里面直接控制,通常定制页面就用这种方法。
3.3 直接在模板中设置区块及参数,不使用区块配置文件:这种就相当于把模板和区块配置合并一起了,任何调整都修改这个模板。
17.JIEQI CMS模板 - 7.页面定制(一)
七、页面定制
1、定制一个页面,不使用系统框架,通常用于设计一个独立的页面,不使用系统默认的导航,但是可能需要系统变量或者调用系统区块。
主要程序部分如下:
<?php
define('JIEQI_MODULE_NAME', 'system'); //定义本页面属于那个模块
require_once('global.php'); //包含通用程序,每个页面必须高喊
jieqi_getconfigs(JIEQI_MODULE_NAME, 'blocks'); //包含区块参数,如果需要在页面调用区块的话
//本函数第一个书模块名,第二个是区块配置文件名,配置文件皆在 /configs 目录下,如上例对应的文件是 /configs/blocks.php
$jieqi_page_template=JIEQI_ROOT_PATH.'/templates/custom.html'; //设置该页面的模板文件
include_once(JIEQI_ROOT_PATH.'/header.php'); //包含页头处理
$jieqiTpl->assign('jieqi_indexpage',1); //设置首页标志,不是首页请注释本语句,便于模板里面可以判断,给模板其他参数赋值也用这个方法
include_once(JIEQI_ROOT_PATH.'/footer.php'); //包含页尾处理
?>
模板部分可以使用系统标签,如 {?$jieqi_url?}
也可以在载入区块配置的前提下,在模板适当位置加入显示区块的标签,标签写法如下:
区块的标题调用方式为 {?$jieqi_pageblocks['bidXXX']['title']?} 里面的 XXX 是指实际的区块序号,可以在区块管理里面看到,或者在区块配置文件中对应的 bid。
区块内容的调用方式为 {?$jieqi_pageblocks['bidXXX']['content']?} 规范跟标题相同。