EXCMS标签 模板底层函数
导航:返回上一页
EXCMS模板标签介绍,“模板底层函数”:
{php}{/php} php脚本嵌套
php标签允许在模板中直接嵌入 php 脚本. 是否处理这些语句取决于$php_handling的设置. 该语句通常不需要使用,当然如果你非常了解此特性或认为必须要用,也可以使用.php 标签演示
1 {php}
2 // 输出调试信息
3 displayDebugInfo()
4 {/php}
if,elseif,else 判断
if语句和和条件同php差不多,但每个词之间必须用空格分割开。也有一些新的条件语句。
列举如下:eq相等,ne、neq不相等,gt大于, lt小于,gte、ge大于等于,lte、le 小于等于,not非,mod求模。
is [not] div by是否能被某数整除, is [not] even是否为偶数,
$a is [not] even by $b即($a / $b) % 2 == 0, is [not] odd是否为奇,
$a is not odd by $b即($a / $b) % 2 != 0
示例:
1 {if $name eq "Peter"}
2 Welcome male.
3 {elseif $name eq "Fengfeng"}
4 Welcome female.
5 {else}
6 Welcome, whatever you are.
7 {/if}
{foreach}{foreachelse}{/foreach}数组遍历
属性名称
类型
必要性
默认值
描述
from array Yes 必要 n/a 循环访问的数组
item string Yes 必要 n/a 当前元素的变量名
key string No 可选 n/a 当前键名的变量名
name string No 可选 n/a 用于访问foreach属性的foreach循环的名称
from属性通常是值数组,被用于判断{foreach}的循环次数。
在from变量中没有值时,将执行{foreachelse}。
{foreach}循环也有自身属性的变量,可以通过{$name. property}访问,其中"name"是name属性。
注意:name属性仅在需要访问{foreach}属性时有效,访问未定义name的{foreach}属性不会抛出一个错误,但将导致不可预知的结果。
{foreach}属性有iteration, total.
示例:
例一. item属性
1 2 $myArray = array(1000, 1001, 1002);
3 ?>
用模板以无序列表输出$myArray
1
- {$foo}
2 {foreach from=$myArray item=foo}
3
4 {/foreach}
5
上例将输出:
- 1000
- 1001
- 1002
例二. 演示item和key属性
1 2 $myArray = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding');
3 ?>
用模板按键名/键值对的形式输出$myArray, 类似于PHP的foreach。
1
- {$k}: {$v}
2 {foreach from=$myArray key=k item=v}
3
4 {/foreach}
5
上例将输出:
- 9: Tennis
- 3: Swimming
- 8: Coding
例三. {foreach}的item属性是关联数组
1 2 $items = array(23 => array('no' => 2456, 'label' => 'Salad'),
3 96 => array('no' => 4889, 'label' => 'Cream')
4 );
5 ?>
模板中,url通过$myId输出$items
1
- {$i.no}: {$i.label}
2 {foreach from=$items key=myId item=i}
3
4 {/foreach}
5
上例将输出:
例四. {foreach}使用嵌套的item和key
向Smarty设置一个数组,对于每个键名对应的每个循环值都包括键。
01 02 $contacts = array(
03 array('phone' => '1',
04 'fax' => '2',
05 'cell' => '3'),
06 array('phone' => '555-4444',
07 'fax' => '555-3333',
08 'cell' => '760-1234')
09 );
10 ?>
用于输出$contact的模板。
1 {foreach name=outer item=contact from=$contacts}
2
3 {foreach key=key item=item from=$contact}
4 {$key}: {$item}
5 {/foreach}
6 {/foreach}
上例将输出:
phone: 1
fax: 2
cell: 3
phone: 555-4444
fax: 555-3333
cell: 760-1234
例五. 使用{foreachelse}的数据库示例
一个数据库(例如PEAR或ADODB)的搜索脚本示例,
1
2 $search_condition = "where name like '$foo%' ";
3 $sql = 'select contact_id, name, nick from contacts '.$search_condition.' order by name';
4 $results = $excmsdb->getAssoc($sql);
5 ?>
借助{foreachelse}标记在没有结果时模板输出"None found"字样。
1 {foreach key=cid item=con from=$results}
2 {$con.name} - {$con.nick}
3 {foreachelse}
4 No items were found in the search
5 {/foreach}
index包含当前数组索引,从零开始。
例六. iteration示例
01 {* 每五行输出一次头部区块 *}
02
03 {foreach from=$items key=myId item=i name=foo}
04 {if $foo.iteration % 4 == 0}
05 {/if}
06 {/foreach}
07
| Title |
|---|
| {$i.label} |
11 {/if}
12 {foreachelse}
13 ... something else ...
14 {/foreach}
iteration包含当前循环次数,从0开始,每次循环增长1。
例七. total属性示例
1 {* 在结束位置显示行数 *}
2
3 {foreach from=$items key=part_id item=prod name=foo}
4 {$prod.name}
5{$foo.total} items
6 {foreachelse}
7 ... something else ...
8 {/foreach}
include_php 引入PHP文件
include_php这个标签通常用来在你的模板文件中include一个php文件.这个php文件一般在这个本地路径的文件夹下面。 include_php这个标签必须有file这个属性.用来 包含应用php文件的路径的人.可以是相对路径,也可以是绝对路径. 例:{include_php file="/path/to/load.php"}{literal} {/literal}模板分隔符
EXCMS模板引擎的定界符默认是{和},另外模版中常有{}不是作为定界符存在的情况,例如js函数。这时候我们需要作必要的处理,否则程序会默认为模 板标签,模板引擎解析时会出错。literal 标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息. 该特性用于显示有可能包含大括号等字符信息的 javascript或css样式脚本. 当这些信息处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示.
例子:
01 {literal}
02
15 {/literal}