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}