数字化技能提升教程,数字化时代生存宝典

数字化百科 / 词条 / EXCMS标签 模板底层函数

EXCMS标签 模板底层函数

查看全部词条命名空间:Main

导航:返回上一页


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 2 $myArray = array(1000, 1001, 1002);
3 ?>

用模板以无序列表输出$myArray

1

    2 {foreach from=$myArray item=foo}
    3
  • {$foo}

  • 4 {/foreach}
    5


上例将输出:


  • 1000

  • 1001

  • 1002


例二. 演示item和key属性


1 2 $myArray = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding');
3 ?>

用模板按键名/键值对的形式输出$myArray, 类似于PHP的foreach。

1

    2 {foreach from=$myArray key=k item=v}
    3
  • {$k}: {$v}

  • 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

上例将输出:


例四. {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
08
09
10
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}

category:EXCMS