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和item是必要属性
- {foreach}循环的name可以是任何字母,数组,下划线的组合,参考PHP变量。
- {foreach}循环可以嵌套,嵌套的{foreach}的名称应当互不相同。
from属性通常是值数组,被用于判断{foreach}的循环次数。
在from变量中没有值时,将执行{foreachelse}。
{foreach}循环也有自身属性的变量,可以通过{$name. property}访问,其中"name"是name属性。
注意:name属性仅在需要访问{foreach}属性时有效,访问未定义name的{foreach}属性不会抛出一个错误,但将导致不可预知的结果。
{foreach}属性有iteration, total.
示例:
例一. item属性
1 <?php 2 $myArray = array(1000, 1001, 1002); 3 ?>
用模板以无序列表输出$myArray
1 <ul> 2 {foreach from=$myArray item=foo} 3 <li>{$foo}</li> 4 {/foreach} 5 </ul>
上例将输出:
<ul> <li>1000</li> <li>1001</li> <li>1002</li> </ul>
例二. 演示item和key属性
1 <?php 2 $myArray = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding'); 3 ?>
用模板按键名/键值对的形式输出$myArray, 类似于PHP的foreach。
1 <ul> 2 {foreach from=$myArray key=k item=v} 3 <li>{$k}: {$v}</li> 4 {/foreach} 5 </ul>
上例将输出:
<ul> <li>9: Tennis</li> <li>3: Swimming</li> <li>8: Coding</li> </ul>
例三. {foreach}的item属性是关联数组
1 <?php 2 $items = array(23 => array('no' => 2456, 'label' => 'Salad'), 3 96 => array('no' => 4889, 'label' => 'Cream') 4 ); 5 ?>
模板中,url通过$myId输出$items
1 <ul> 2 {foreach from=$items key=myId item=i} 3 <li><a href="item.php?id=%7B$myId%7D">{$i.no}: {$i.label}</a></li> 4 {/foreach} 5 </ul>
上例将输出:
<ul> <li><a href="item.php?id=23">2456: Salad</li> <li><a href="item.php?id=96">4889: Cream</li> </ul>
例四. {foreach}使用嵌套的item和key
向Smarty设置一个数组,对于每个键名对应的每个循环值都包括键。
01 <?php 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 <hr> 3 {foreach key=key item=item from=$contact} 4 {$key}: {$item}<br> 5 {/foreach} 6 {/foreach}
上例将输出:
<hr /> phone: 1<br /> fax: 2<br /> cell: 3<br /> <hr /> phone: 555-4444<br /> fax: 555-3333<br /> cell: 760-1234<br />
例五. 使用{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 <a href="contact.php?contact_id=%7B$cid%7D">{$con.name} - {$con.nick}</a><br> 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 <table> 08 <tbody><tr><th>Title</th></tr> 09 <tr><td>{$i.label}</td></tr> 10 </tbody></table> 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}<hr> 5 <div id="total">{$foo.total} items</div> 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 <script language="javascript"> 03 function isblank(field) { 04 if (field.value == '') 05 { 06 return false; 07 } 08 else 09 { 10 document.loginform.submit(); 11 return true; 12 } 13 } 14 </script> 15 {/literal}