smarty学习——内建函数(部分接上)
9.{foreach} {foreachelse}
格式如下:
{foreach $arrayvar as $itemvar} {foreach $arrayvar as $keyvar=>$itemvar}
foreach 和for 的目的是相似的都是进行循环的数据操作,具有以下特性:
a.支持嵌入,就是我们可以在foreach 中继续使用foreach
b.通常使用的数据 $arrayvar 是数组类型的数据。
c.foreachelse 是当在数组中没有数据时执行。
d.{foreach} 内置一些属性 @index, @iteration, @first, @last, @show, @total.
e.里面可以包含{break} { continue}
如下例子:
简单例子:
<?php $arr = array('red', 'green', 'blue'); $smarty->assign('myColors', $arr); ?>模板文件如下: <ul> {foreach $myColors as $color} <li>{$color}</li> {/foreach} </ul> 输出结果: <ul> <li>red</li> <li>green</li> <li>blue</li> </ul>
处理键值:
<?php $people = array('fname' => 'John', 'lname' => 'Doe', 'email' => 'j.doe@example.com'); $smarty->assign('myPeople', $people); ?> 键值模板: <ul> {foreach $myPeople as $value} <li>{$value@key}: {$value}</li> {/foreach} </ul> 输出: <ul> <li>fname: John</li> <li>lname: Doe</li> <li>email: j.doe@example.com</li> </ul>
foreach 的嵌套:
<?php $smarty->assign('contacts', array( array('phone' => '555-555-1234', 'fax' => '555-555-5678', 'cell' => '555-555-0357'), array('phone' => '800-555-4444', 'fax' => '800-555-3333', 'cell' => '800-555-2222') )); ?> 模板文件: {* key always available as a property *} {foreach $contacts as $contact} {foreach $contact as $value} {$value@key}: {$value} {/foreach} {/foreach} {* accessing key the PHP syntax alternate *} {foreach $contacts as $contact} {foreach $contact as $key => $value} {$key}: {$value} {/foreach} {/foreach} 输出 phone: 555-555-1234 fax: 555-555-5678 cell: 555-555-0357 phone: 800-555-4444 fax: 800-555-3333 cell: 800-555-2222
@index 的使用:
<table> {foreach $items as $i} {if $i@index eq 3} {* put empty table row *} <tr><td>nbsp;</td></tr> {/if} <tr><td>{$i.label}</td></tr> {/foreach} </table>
{break}的使用:
{$data = [1,2,3,4,5]} {foreach $data as $value} {if $value == 3} {* abort iterating the array *} {break} {/if} {$value} {/foreach} {* prints: 1 2 *}
10. {if } {elseif} {else}
这几个语法比较常用:
这是使用的语法表格:
Qualifier | Alternates | Syntax Example | Meaning | PHP Equivalent |
---|---|---|---|---|
== | eq | b | equals | == |
!= | ne, neq | b | not equals | != |
> | gt | b | greater than | > |
< | lt | b | less than | < |
>= | gte, ge | b | greater than or equal | >= |
<= | lte, le | b | less than or equal | <= |
=== | $a === 0 | check for identity | === | |
! | not | not $a | negation (unary) | ! |
% | mod | b | modulous | % |
is [not] div by | $a is not div by 4 | divisible by | b == 0 | |
is [not] even | $a is not even | [not] an even number (unary) | $a % 2 == 0 | |
is [not] even by | b | grouping level [not] even | (b) % 2 == 0 | |
is [not] odd | $a is not odd | [not] an odd number (unary) | $a % 2 != 0 | |
is [not] odd by | b | [not] an odd grouping | (b) % 2 != 0 |
11 .include
include的语法表格:
Attribute Name | Type | Required | Default | Description |
---|---|---|---|---|
file | string | Yes | n/a | The name of the template file to include |
assign | string | No | n/a | The name of the variable that the output of include will be assigned to |
cache_lifetime | integer | No | n/a | Enable caching of this subtemplate with an individual cache lifetime |
compile_id | string/integer | No | n/a | Compile this subtemplate with an individual compile_id |
cache_id | string/integer | No | n/a | Enable caching of this subtemplate with an individual cache_id |
scope | string | No | n/a | Define the scope of all in the subtemplate assigned variables: 'parent','root' or 'global' |
[var ...] | [var type] | No | n/a | variable to pass local to template |
可选的选项:
Name | Description |
---|---|
nocache | Disables caching of this subtemplate |
caching | Enable caching of this subtemplate |
inline | If set merge the compile code of the subtemplate into the compiled calling templat |
12 .include_php
Attribute Name | Type | Required | Default | Description |
---|---|---|---|---|
file | string | Yes | n/a | The name of the php file to include as absolute path |
once | boolean | No | TRUE |
whether or not to include the php file more than once if included multiple times |
assign | string | No | n/a | The name of the variable that the output of include_php will be assigned to |
可选的:
Name | Description |
---|---|
nocache | Disables caching of inluded PHP script |
13.{ldelim} {rdelim}
进行javascript 以及css 文件的添加:可以使用 {literal}{/literal}
简单例子:
<script language="JavaScript"> function foo() {ldelim} ... code ... {rdelim} </script>
14.{section},{sectionelse}
也是类似的进行循环操作的标签:
Attribute Name | Type | Required | Default | Description |
---|---|---|---|---|
name | string | Yes | n/a | The name of the section |
loop | mixed | Yes | n/a | Value to determine the number of loop iterations |
start | integer | No | 0 | The index position that the section will begin looping. If the value is negative, the start position is calculated from the end of the array. For example, if there are seven values in the loop array and start is -2, the start index is 5. Invalid values (values outside of the length of the loop array) are automatically truncated to the closest valid value. |
step | integer | No | 1 | The step value that will be used to traverse the loop array. For example, step=2 will loop on index 0,2,4, etc. If step is negative, it will step through the array backwards. |
max | integer | No | n/a | Sets the maximum number of times the section will loop. |
show | boolean | No | TRUE |
Determines whether or not to show this section |
例子:
<?php $data = array( array('name' => 'John Smith', 'home' => '555-555-5555', 'cell' => '666-555-5555', 'email' => 'john@myexample.com'), array('name' => 'Jack Jones', 'home' => '777-555-5555', 'cell' => '888-555-5555', 'email' => 'jack@myexample.com'), array('name' => 'Jane Munson', 'home' => '000-555-5555', 'cell' => '123456', 'email' => 'jane@myexample.com') ); $smarty->assign('contacts',$data); ?> 模板文件: {section name=customer loop=$contacts} <p> name: {$contacts[customer].name}<br /> home: {$contacts[customer].home}<br /> cell: {$contacts[customer].cell}<br /> e-mail: {$contacts[customer].email} </p> {/section} 输出: <p> name: John Smith<br /> home: 555-555-5555<br /> cell: 666-555-5555<br /> e-mail: john@myexample.com </p> <p> name: Jack Jones<br /> home phone: 777-555-5555<br /> cell phone: 888-555-5555<br /> e-mail: jack@myexample.com </p> <p> name: Jane Munson<br /> home phone: 000-555-5555<br /> cell phone: 123456<br /> e-mail: jane@myexample.com </p>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)