全部博文(2065)
分类:
2009-07-03 19:41:04
内建函数
整套模板系统中的内建函数包括如下:
现在开始分别讲下这几个内建函数的使用
:
capture函数的作用是收集模板输出的数据到一个变量里,而不是把它们输出到页面.任何在 {capture name="foo"}和{/capture}之间的数据都被收到了由函数的名称属性指定的变量里($foo).
收集的信息可以用在特殊变量$smarty里.
例如capture.foo就收集了以上数据.如果函数没有名字属性,将使用"default".
每个{capture}都必须对应{/capture},也不能嵌套使用capture函数
我的心得:就是将数据的抓取出来。并将其存放到变量里面去的!
插一句:在PHP中我们能够通过IF ELSE进行逻辑判断并其中的连接是通过AND之类的操作。在Smarty语言中我们能够通过使用:
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 ELSE之类的操作上面进行逻辑连接的。其含义如下:
equal : 相等、not equal:不等于、greater than:大于、less than:小于、less than or equal:小于等于、great than or equal:大于等于、is even:是偶数、is odd:是奇数、is not even:不是偶数、is not odd:不是奇数、not:非、mod:取余、div by:被。。。除
先将这些示例运行一遍之后就直接写心得了!
心得:这个函数的作用就是将包含在它中间的数据都输出到它的变量里面去的。试想我可能包含了许多的数据了。然后我就可以将其都打包封装到一个变量去方便吧!
格式如下:{capture
name=ban} 那我就将数据封装到ban中去了!
如果想要引用的话可以这样引用 {$smarty.capture.ban} 引用数据
如果以后想将数据整理打包一并输出可以考虑使用这个 这个函数不错!
心得:这个函数的作用就是去读配置信息。比如说我的页面可能修改一些HTML标签的属性进来。这些属性我们可以定义在conf配置文件中去。切记这个配置文件必须要放在对应的目录下面的否则找不到了!然后定义好这些配置信息之后我们就能够在程序中直接读取到!
第一步:是这样读进来{config_load file=”color.conf”}
第二步:取里面的数据 {# bgcolor #} 这样取数据!
比起什么程序来说简单多了哈哈!果然是个好东西!
如果配置文件是分成了多个小节的话我们还可以只取其中的一个节 添加一个属性
section="Customer" 进来!
两个必选参数:from item
From 填写的是哪个数组。
Item 当前的遍历数组中的单个元素。 元素调用的时候是通过引用属性出来的
Foreachelse表示当这个数组为空的时候
{foreach from = $custid item=$curr_id}
id:{$curr_id.id}
{/foreach}
from 后面是哪个数组、item
表示数组中单个元素值
比如说我取出来一个大的数据集之后 想要遍历全部的数据就可以在模板中进行先遍历的!
Include
心得: 相当于PHP中的include关键字的。可以引入包含进来一个新的文件进来!
{include
file=””}
能够引入进来外部的文件进来的!
Include_php
心得:为了保持PHP代码与模板之间独立开来!比如说你的模板中有一个导航菜单是来自于DB的。那这个时候这个导航菜单是动态的。怎么办呢?这个时候需要去读库操作!
OK我们就可以引入PHP代码进来!
其实我觉得这样做效果不好。因为我的意思就是将视图层彻底与模型分开来!
所以
{include_php file=”load.php”} 而这个地方你又去读库了。就不彻底分隔开了!不好!
Insert
如果你没有设置缓存的话那这个就跟include效果是一样的。也是引入了一个文件。这个家伙用在处理局部缓存的时候非常有用的!这个东西所包含进来的是不会被缓存的哦!哈哈
所以在一个大的页面中有部分内容是经常性刷新的话就可以考虑用insert来引入的了!
循环语句已经有了。现在来看下逻辑判断的IF ELSE语句吧!
IF ELSEIF ELSE 语句
心得:传统编程中的== !=
<> 这些个操作符在这里我们用
"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 $name eq “Fred”}
{/if} 一定要记得要关闭掉这个标签才行!
切记一点全部的Smarty的东西都要写在{} 里面去的。不然就会有问题了哈!
Literal 标签关键字
嵌在这个关键字里面的东西不会被Smarty引擎所解析的!如果你写一段JS脚本的话那它一样会去执行JS的内容的!
这样的话哈哈。我一开始在我的模板页面中写了JS进来了发现解析不了加上这个东西就OK了哈哈。强!
{literal}
{/literal}
PHP
这个标签就更离谱了哈哈能够直接在我们的模板页面写PHP脚本的!
{php}
Include(“displary.php”);
{/php}
Section,sectionelse 另外一种循环的方式!
心得:这个标签是能够用来取数组里面的数据出来。记得全部的section标记都得有关闭操作的!两个必选参数 name loop
这个家伙比较重要所以我罗列得东西将会比较多点的!
示例一:
我的TPL文件如下:
{section name=customer loop=$custid}
id:{$custid[customer]}
{/section}
我的PHP对应的代码如下:
$date = array(1000,1001,1002); //得到一个数组出来
$smarty->assign('custid',$date); //赋值
$smarty->display('Learn.tpl');
输出结果如下:
id:1000
id:1001
id:1002
Smarty中直接做循环
{section name=foo start=10 loop=20 step=2}
{$smarty.section.foo.index}
{*$smarty.section*} 感觉这个好像是面向对象的属性
{/section} index表示的是当前循环的下标值。
index_prev
表示前一个下标值
{section name=bar loop=21 max=6 step=-2}
index_next 表示下一个下标值
{$smarty.section.bar.index}
{/section}
看下是如何实现关联数组的方法
{section name=customer loop=$contacts}
name: {$contacts[customer].name}
home: {$contacts[customer].home}
cell: {$contacts[customer].cell}
e-mail: {$contacts[customer].email}
{/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);
?>
看下面的实现从DB中查询得到数据集之后在页面中循环显示出来!
我们的模板代码如下:
上面我们谈了下内建函数。现在来看下这些个函数的!
这里面包括的函数如下:扩展的函数库如下:
下面我们分别进行介绍下这些个扩展函数的使用吧!
Assign函数
参数:var value
示例:{assign var = “name” value=”Bob”} 这样就表示赋参数给name的值为Bob
{assign
var="name" value="Bob"}
The
value of $name is {$name} 直接在模板里面进行赋值处理!
函数
心得:标记个数位置的一个东西
{counter
start=0 skip=2 print=false}
{counter}
{counter}
Fetch
就是去抓取数据。可以在本地系统中进行抓取数据也可以在远程HTTP上面抓取数据回来的!然后如果有个属性assign如果设置了的话就表示将抓取回来的数据保存到这个变量上面去的。你可以打印出来这个变量值的!
{fetch
file= “ assign=”weather”}
{if
$weather ne “”}
{$weather}
{/if}
这样非常方便哦。比如说我想抓别人提供的接口数据的话就这样实现了!
能够实现checkbox操作的呢!
可以生成IMG的HTML标签的!
{html_image
file="../Html/pic/del_icon2.gif"} 这样的标签能够生成传统的HTML中的img标签了哦!
生成类似于我们的HTML中的操作一样的哦!
如果我们在我们的模板里面写好这些标签之后通过赋值我们是赋的是数组值的话就会生成一组组出来的了!
类似于上面的这些个标签的。可以实现生成HTML中的radios标签出来的!
可以生成日期选择框。非常地方便的!
完全可以弥补HTML中没有功能的!丰富!
能够生成HTML的表格。
可以生成类似于HTML中的mailto的!
配置文件的写法
# global variables
pageTitle = "Main Menu"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00
[Customer]
pageTitle = "Customer Info"
我们在后面的读配置的时候是能够直接去读这个[Customer]节上面的数据的!
第三部分:开始整理有关于程序方面的东西!
$compile_dir : "./templates_c", 编译的目录!
配置文件的存放目录!
放置插件的目录
以后遇到了问题我再进行整理!
我的学习之道:
第一步:大致上看一下这方面的资料
第二步:开始去写程序实现
第三步:有问题了再进行查询整理!
第四步:反复写程序!
牢记!程序员的职责就是反复去写程序在写的过程中去提高自己的编程能力!