Smarty入门--内建函数

15 篇文章 0 订阅
4 篇文章 0 订阅

Smarty入门–内建函数

Smarty模板中自带了一些内建函数,用户不能创建和内建函数同名的函数。

if

这个太常用来了。判断

衍生的有:elseelseif

使用以下条件修饰词:
eq、ne、neq、gt、lt、lte、le、gte、ge、is even、is odd、is not even、is not odd、not、mod、div by、even by、odd by、==、!=、>、<、<=、>=

例子:


{if $a == 1}
{elseif $a == 2}
{else}
{/if}

foreach

循环啊,算是smarty中常用的函数了。

属性类型缺省值描述
fromstring必须待循环数组的名称
itemstring必须当前处理元素的变量名称
keystring当前处理元素的键名
namestring该循环的名称

具体形式根据传入的函数来写,可以嵌套。

foreach还有一些参数:

参数作用
iteration显示循环的次数,从1开始
first 当前foreach 循环第一次执行时 first 被设置成 true
last 当前foreach 循环执行到最后一遍时 last 被设置成 true.
show取值为布尔值 true 或 false. 如果指定为 false 该循环不显示
total用于显示循环执行的次数,可以在循环中或循环执行后调用.


{*具体形式根据传入的函数来写,可以嵌套。*}
{foreach name=a item=contact from=$contacts}
    {*判断是不是第一次循环*}
    {if $smarty.foreach.a.first}
        {*不显示该条循环*}
        {$smarty.foreach.a.show=false}
    {/if}
    {foreach name=b key=key item=item from=$contact}
        {$key}: {$item}<br>
        {*显示循环outer的次数*}
        {$smarty.foreach.a.iteration}
        {*显示循环b的次数*}
        {$smarty.foreach.b.iteration}
    {foreachelse}
        {$key}:"不存在!!"
    {/foreach}
{/foreach}
{*显示a的循环次数*}
{$smarty.foreach.a.total}

section

用于遍历数组

属性类型缺省值描述
namestring必须该循环的名称
loop[$variable_name]必须决定循环次数的变量名称
startstring0循环执行的初始位置
stepstring1循环的步长
maxinteger设定循环最大执行次数
showbooleantrue决定是否显示该循环

详细:

start:循环执行的初始位置. 如果该值为负数,开始位置从数组的尾部算起.例如:如果数组中有7个元素,指定start为-2,那么指向当前数组的索引为5.非法值(超过了循环数组的下限)将被自动调整为最接近的合法值.

step:该值决定循环的步长. 例如指定step=2将只遍历下标为0、2、4等的元素.如果step为负值,那么遍历数组的时候从后向前遍历.

还有sectionelse这么个东西,和foreachelse一样就是,值为空的时候就运行。

还有这么多参数

参数作用
iteration(rownum)显示循环的次数,从1开始
first 当前foreach 循环第一次执行时 first 被设置成 true
last 当前foreach 循环执行到最后一遍时 last 被设置成 true.
show取值为布尔值 true 或 false. 如果指定为 false 该循环不显示
total用于显示循环执行的次数,可以在循环中或循环执行后调用.
index显示当前循环的索引,从start开始,每次加step
index_prev用于显示上一个循环索引值. 循环开始时,此值为-step.
index_next用于显示下一个循环索引值.最后一次时,仍然比当前索引值大
loop用于显示该循环上一次循环时的索引值. 该值可以用于循环内部或循环结束后.

例子:


{section name=student loop=$student_array}
<h1>ID:{iteration}</h1>
<h1>name:{$student['name']}</h1>
<h1>age:{$student['age']}</h1>
<h1>name:{$student['name']}</h1>
{sectionelse}
<h1>ID:{iteration}</h1>
<h1>name:NULL</h1>
<h1>age:NULL</h1>
<h1>name:NULL</h1>
{/section}

和foreach类似。


include

标签用于在当前模板中包含其它模板. 当前模板中的变量在被包含的模板中可用.

属性类型缺省值描述
filestring必须待包含的模板文件名
assignstring该属性指定一个变量保存待包含模板的输出
[var …][var type]传递给待包含模板的本地参数,只在待包含模板中有效

算是比较常用。

{include file="header.tpl" title="ILoveSmarty" auther="Jiang"}

{*body.tpl中的内容不会输出会保存在data中*}
{include file="body.tpl" assign="data"}
{*输出信息*}
{$data}

include_php

inluce_php 函数用于在模板中包含 php 脚本.如果设置了安全模式,被包含的脚本必须位于 trusteddir.includephpfilephp trusted_dir 的相对路径,也可以是绝对路径.

属性类型缺省值描述
filestring必须待包含php文件的路径
oncestringtrue如果待包含php文件已被包含是否仍然包含
assignstring该属性指定一个变量保存待包含php文件的输出

assign 需要说一下,他定义的会获取引入app的所有输出,
但是,注意!!这里是存成一个字符串。
下面有例子。

例子:

test.php


$this->assign('name',"Tom");
$this->assign('age',"24");
echo "Hi";
var_dump("Hellow");

tpl


{*引入php*}
{include_php file="./test.php" assign="data"}

<h1>{$name}</h1>
<h1>{$age}</h1>

{*输出data信息*}
<h1>{$data}</h1>

这里写图片描述


insert

Insert函数类似欲include函数,不同之处是 insert所包含的内容不会被缓存,每次调用该模板都会重新执行该函数.

这东西是用来调用方法的,调用一个已经存在的方法,用来生成一些东西。

可以用来引入广告,天气预报之类的实时更新的东西。

属性类型缺省值描述
namestring必须插入函数的名称
assignstring该属性指定一个变量保存待插入函数输出
scriptstring插入函数前需要先包含的php脚本名称
[var …][var type]传递给待插入函数的本地参数

name,调用方法的名字,实际上是调用方法的名字的一部分。
按照规范,名字应该是insert_name(),比如说name=heiheihei,函数名就是insert_heiheihei()

assign的效果和上面的一样存住输出。

script,这个就是在调用包含方法之前包含指定的php脚本,说白了这个是引入,name是调用。

[var …]参数,一可以有多个,以数组形式传入方法,下面例子看。

例子:

可以是这样的。

test.php (这个是包含被调用方法的php文件。)


<?php

//这是要被调用的方法
function insert_eat(array $foods)
{
    foreach($foods as $name => $food) {
        echo $name . "吃" . $food . "!!!\n";
    }
}

?>

tpl

{*调用insert_eat()方法,参数为array("Tom"=>"banana","Jerry"=>"apple"),在调用方法前读取test.php文件,方法的输出保存在data中*}
{insert name="eat" assign="data" script="./test.php" Tom="banana" Jerry="apple"}

{*输出信息*}
<h1>{$data}</h1>

注意:
1.例子出现了一个很尴尬的问题,在读参数的时候,name=eat assign=data也被当做参数读了进来,不知道是个别现象还是都这样,使用时要注意。
2.我的Smarty环境要求啊我起名用如下格式:smarty_insert_eat比手册里写的多了个smarty_不知道是我的环境问题还是设置问题。
3.assign=data不起作用。

太乱了。。。。还是别用了。。。。。


literal

Literal 标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息. 该特性用于显示有可能包含大括号等字符信息的 javascript 脚本. 当这些信息处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示.

这个我还真没用过,不过倒是经常看见。因为现在做的项目的开发规范不允许我们直接在tpl里写js脚本。

例子:


{*literal标签内的信息不会被Smarty识别*}
{literal}

function isblank(field) {
    if (field.value == '') {
        return false;
    } else {
        document.loginform.submit();
        return true;
    }
}

{/literal}

config_load

该函数用于从配置文件中加载变量.

基本上用不到。。。。

参数类型缺省值描述
filestring必须配置文件名
sectionstring配置文件中待加载部分的名称
scopestringlocal加载数据的作用域
globalbooleanfalse说明加载的变量是否全局

scope的作用域分为
local说明该变量的作用域为当前模板.
parent 说明该变量的作用域为当前模板和当前模板的父模板(调用当前模板的模板). global 说明该变量的作用域为所有模板.

global属性可以被scope覆盖。

例:


{config_load file="colors.conf"}

<html>
<title>颜色</title>
<body bgcolor="{#bodyBgColor#}">
<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
    <tr bgcolor="{#rowBgColor#}">
        <td>First</td>
        <td>Last</td>
        <td>Address</td>
    </tr>
</table>
</body>
</html>

配置文件:colors.conf


# global variables
pageTitle = "Main Menu"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00

[Customer]
pageTitle = "Customer Info"

[Login]
pageTitle = "Login"
focus = "username"
Intro = """This is a value that spans more
 than one line. you must enclose
            it in triple quotes."""

# hidden section
[.Database]
host=my.domain.com
db=ADDRESSBOOK
user=php-user
pass=foobar

smarty都没什么人用了,更别说这个方法了。


capture

捕获。

capture用来捕获数据储存到一个变量里。

{capture name=abc}{/capture}之间的信息会被捕获。

如果没有捕获到值则为空。

这里要注意,capture内全部值都会被捕获为值,包括smarty变量和HTML代码。


{*开始捕获数据*}
{capture name=abc}
{*读取数据*}
{include file="text1.tpl"}
{/capture}

{*如果abc捕获到了值,输出。*}
{if $smarty.capture.abc ne ""}
{$smarty.capture.abc}
{/if}

例子:


{*开始捕获数据*}
{capture name=abc}
{*读取数据*}
{*name的值为"Tom"*}
<h1>name:{$name}</h1>
{/capture}

{*如果abc捕获到了值,输出。*}
{if $smarty.capture.abc ne ""}
{$smarty.capture.abc}
{/if}

结果:

这里写图片描述


ldelim,rdelim

用来代替输出{},不是很理解为什么属于内建函数。

例子:


<h1>I Love {ldelim}Smarty{rdelim}!</h1>

这是输出:


I Love {Smarty}!

php

就是在标签中可以直接使用php代码。

例子:


{php}

include("test.php");

{/php}


strip

移除标签内的首位空格和所有回车

例子:

{strip}
<table border=0>
    <tr>
        <td>
            <A HREF="{$url}">
            <font color="red">This is a test</font>
            </A>
        </td>
    </tr>
</table>
{/strip}

输出:

<table border=0><tr><td><A HREF="http://my.domain.com"><font color="red">This is a test</font></A></td></tr></table>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值