视图引擎Smarty的简单使用
来源:互联网 发布:迈阿密热线知乎 编辑:程序博客网 时间:2024/06/06 14:17
参考: http://www.jb51.net/article/5091.htm
参考:http://baike.baidu.com/link?url=FFySw2r-dsE-lTdQgGy2DpLhciXM-JqUagEIydE_aFY3rGMnlYrf4eOOWw-fK-MFNFMp8v7ddMOrmlnIHTlP4K
其中还包含来自对慕课网的学习。
什么是模版引擎
不知道从什么时候开始,有人开始对 HTML 内嵌入 Server Script 觉得不太满意。然而不论是微软的 ASP 或是开放源码的 PHP,都是属于内嵌 Server Script 的网页伺服端语言。因此也就有人想到,如果能把程序应用逻辑 (或称商业应用逻辑) 与网页呈现 (Layout) 逻辑分离的话,是不是会比较好呢?
其实这个问题早就存在已久,从交互式网页开始风行时,不论是 ASP 或是 PHP 的使用者都是身兼程序开发者与视觉设计师两种身份。可是通常这些使用者不是程序强就是美工强,如果要两者同时兼顾,那可得死掉不少脑细胞...
所以模版引擎就应运而生啦!模版引擎的目的,就是要达到上述提到的逻辑分离的功能。它能让程序开发者专注于资料的控制或是功能的达成;而视觉设计师则可专注于网页排版,让网页看起来更具有专业感!因此模版引擎很适合公司的网站开发团队使用,使每个人都能发挥其专长!
Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。
下面记录一下关于Smarty的基础使用:
1、安装Smarty
首先从Smarty官网下载:http://www.smarty.net/
然后解压出来,并且文件目录结构,修改为如下:(方面使用而已)
可以将其他不用的文件删除。
2、配置Smarty并进行简单使用
下面我们创建如下类似目录结构(这要包括cache Smarty的缓存目录、template_c Smarty的编译结果目录、tpl Smarty的视图模板目录 —— 这配置Smarty的过程中会引用这些目录)
在 test.php 文件中 配置Smarty:(记得先导入Smarty的主文件 Smarty.class.php)
<?php require('../smarty-3.1.29/libs/Smarty.class.php');$smarty = new Smarty();//Smarty的口诀“五配置方法”//五配置的介绍$smarty->left_delimiter = "{"; //左定界符$smarty->right_delimiter = "}"; //右定界符$smarty->template_dir = "tpl"; //html模板的地址 //要把对应的目录创建好$smarty->compile_dir = "template_c"; //模板编译生成的文件$smarty->cache_dir = "cache"; //缓存//以下是开启缓存的另两个配置。因为通常不用smarty的缓存机制,所以此项为了解。$smarty->caching = true; //开启缓存$smarty->cache_lifetime = 120; //缓存时间//在smarty模板变量的赋值$smarty->assign('articletitle', '文章标题'); //注册到smarty模板里面去(变量名,变量值)//展示编写好的模板,该函数能对模板进行编译和展示$smarty->display('test.tpl');?>通过 $smarty->assign('articletitle', '文章标题'); 将变量articletitle注册到Smarty模板。并且使用视图 test.tpl (当然后缀名可以为 .html,实际上网页开发也是用 .html)。
test.tpl(在tpl目录下创建)
{$articletitle} <br/>这样我们就能使用刚注册到Smarty模板的变量 articletitle 了。
访问过程为:执行test.php文件,创建Smarty对象,配置Smarty,将变量articletitle 注册到Smarty,选择视图进行显示(Smarty会对视图进行编译将视图中以{}为定界符包起来的变量解析为变量的值,然后显示在页面)。这样实现了界面层与逻辑层的分离。逻辑层通过注册数据到Smarty,通过控制显示对应的界面,界面就可以使用逻辑层返回的数据进行显示。
3、Smarty变量的访问
3.1、访问一维数组
$arr = array('title'=>'smarty的学习', 'author' => '小明');$smarty->assign('arr', $arr);
在视图中(下面这两种方式都可以正常访问):
{$arr.title} {$arr.author} <br/>{$arr['title']} {$arr['author']} <br/>
3.2、访问二维数组
$arr2 = array('articlecontent'=>array('title'=>'smarty的学习', 'author' => '小明'));$smarty->assign('arr2', $arr2);在视图中:
{$arr2['articlecontent']['title']} {$arr2['articlecontent']['author']} <br />
class My_Object {function meth1($params) {return $params[0].'已经'.$params[1];}}$myobj = new My_Object();$smarty->assign("myobj",$myobj);在视图中:
输出对象{$myobj->meth1(array('苹果','熟了'))}<br /><br />
3.4、访问php其他数据类型
访问php其他数据类型,与在php中使用访问类似,这里就不再给出案例。
(注:对于变量的访问,可以将访问变量的语句嵌套在 html 代码中)
4、条件判断
4.1、基本句式(视图中使用(或者说是html界面))
{if $name eq "a1"}Welcome Sir.{elseif $name eq "a2"}Welcome Ma'am.{else}Welcome, whatever you are.{/if}4.2、条件修饰符有很多,简单的有:eq(==) neq(!=) gt(>) lt(<)
4.3、修饰词时必须和变量或常量用空格开
5、Smarty的循环
5.1、section
section、sectionelse 功能多,参数多。是Smarty用来做循环操作的函数之一。
基本属性有name和loop
除了name和loop属性外,还有以下属性
start 循环执行的初始位置。如果该值为负数,开始位置从数组的尾部算起。例如:如果数组中有7个元素,指定start为-2,那么指向当前数组的索引为5.非法值(超过了循环数组的下限)将被自动调整为最接近的合法值。
step 该值决定循环的步长。例如指定step = 2将只遍历下标为0、2、4等元素。如果step为负值,那么遍历数组的时候从后向前遍历。
max 设定循环最大执行次数。
show 决定是否显示该循环。
案例:
test.php中
//在smarty模板变量的赋值$articlelist = array(array("title" => "第一篇文章","author" => "小王","content" => "第一篇文章该写点啥呢"),array("title" => "第二篇文章","author" => "小李","content" => "又写了一篇不知所云的文章"));$smarty->assign("articlelist", $articlelist);视图中:
<!-- section 在smarty中函数的一种,函数以</函数名>结尾 -->section循环<br />{section name = article loop = $articlelist max=1}{$articlelist[article].title}{$articlelist[article].author}{$articlelist[article].content}<br />{/section}<br />5.2、foreach循环(与PHP中的foreach类似)
视图中:
foreach循环<br />{foreach item = article from = $articlelist}{$article.title}{$article.author}{$article.content}<br />{foreachelse} <!-- 当数组为空是 显示下面的这句话-->当前没有文章{/foreach}<br />foreach循环——PHP形式<br />{foreach $articlelist as $article}{$article.title}{$article.author}{$article.content}<br />{foreachelse}当前没有文章{/foreach}<br />建议使用类似PHP形式的foreach循环,便于记忆使用。
6、Smarty模板的引用
将其他模板引入到当前模板:使用include
在当前模板中使用,例如:
创建入口文件 test03.php
<?php require('../smarty-3.1.29/libs/Smarty.class.php');$smarty = new Smarty();//Smarty的自编口诀“五配置方法”//五配置的介绍$smarty->left_delimiter = "{"; //左定界符$smarty->right_delimiter = "}"; //右定界符$smarty->template_dir = "tpl"; //html模板的地址 //要把对应的目录创建好$smarty->compile_dir = "template_c"; //模板编译生成的文件$smarty->cache_dir = "cache"; //缓存//以下是开启缓存的另两个配置。因为通常不用smarty的缓存机制,所以此项为了解。$smarty->caching = true; //开启缓存$smarty->cache_lifetime = 120; //缓存时间//展示编写好的模板,该函数能对模板进行编译和展示$smarty->display('test03.tpl');?>
创建当前模板 test03.tpl
{include file="header.tpl" sitename="哈哈"} <!-- include还有其他属性(包括 sitename),其他属性的名称可以自定义,它的值可以传给引入的模板--> <!-- 这些自定义的属性仅仅只能在引入的文件中使用,如sitename属性只能在header.tpl中使用-->其中被引入的模板为 header.tpl,属性sitename是自定义的,可以按照PHP的命名方式进行命名。表示传递到被引入的模板的变量,可以在被引入的模板中使用该变量。
header.tpl
头文件——{$sitename}
7、变量调节器
7.1、首字母大写 capitalize
如:{$articleTitle|capitalize}
7.2、字符串连接 cat
如:{$articleTitle|cat:" aaaa"}
7.3、日期格式化 date_format
如:{$yesterday|date_format}
{$yesterday|date_format:" :"%A, %B %e, %Y %H:%M:%S"}
7.4、为未赋值或为空的变量指定默认值default
如:{$articleTitle|default:"no title"}
7.5、转码escape
用于html转码,url转码,在没有转码的变量上转换单引号,十六进制转码,十六进制美化,或者javascript转码。默认是html转码。
7.6、小写lower 大写upper
将变量字符串小(大)写
如:{$articleTitle|lower} {$articleTitle|upper}
7.7、所有的换行符将被替换成<br/>nl2br功能同PHP中nl2br()函数一样
如:{$articleTitle|nl2br}
7.8、其他函数
可以参见手册,原则上应该通过php直接处理完再赋值到smarty变量里,少用smarty函数。
8、使用php内置函数
基本格式为: {参数1|php内置函数名:参数2:参数3:...}
案例如下:
$smarty->assign('time',time());$smarty->assign('str', 'abcdefg');视图中:
Smarty函数的使用(使用PHP的内置函数)date -1<br />在Smarty中函数的调用 | 函数名 ,其中“|”前为函数的第一个参数,函数名后为函数的第二个参数<br />而在php中的date函数,第一个参数为时间戳,第二个参数为时间的格式。所以在使用下面的写法<br />{"Y-m-d"|date:$time} <br />Smarty函数的使用(使用PHP的内置函数)str_replace -2<br /><!-- 在php中的使用 str_replace('d','h',$str) -->{'d'|str_replace:'h':$str} <br />9、自定义Smarty函数
案例:
//自定义函数function test($params) {/*print_r($params);exit;*/$p1 = $params['p1'];$p2 = $params['p2'];return '传入的参数1值为'.$p1.',传入的参数2值为'.$p2;}$smarty->registerPlugin('function', 'f_test', 'test');这样就可以在视图中使用test函数了,如下:
Smarty函数的使用——自定义函数 -3{f_test p1='abc' p2='edf'} <!-- p1 p2 参数(或者称为属性)会打包成数组发送给f_test函数-->10、Smarty插件的学习
10.1、什么是Smarty插件:
Smarty的插件本质上是function函数
10.2、Smarty插件常用类型:
functions 函数插件
modifiers 修饰插件
block functions 区块函数插件
10.3、如何来制作、使用插件:
(1)使用registerPlugin方法注册写好的自定义的函数
(2)将写好的插件放入Smarty解压目录中lib目录下的plugins目录里
(3)php的内置函数,可以自动以修饰插件(变量调节器插件)的形式在模板里使用
具体实现:略。
- 视图引擎Smarty的简单使用
- Smarty模板引擎的使用
- Smarty模板引擎的使用
- 拥有编译器影子的PHP视图引擎Smarty
- 【PHP】Smarty 模板引擎的使用总结
- smarty模板引擎_2-变量的使用
- php smarty模板引擎的使用
- PHP学习之路之Smarty模板引擎的引入和简单使用
- smarty模板简单的使用
- Yaf 结合用户自定义的视图(模板)引擎Smarty(Yaf + Smarty)
- TP5的smarty引擎
- yaf 整合自定义 视图引擎(smarty)
- PHP框架一:Smarty视图引擎
- PHP模板引擎Smarty(一)Smarty下载、配置、一个最简单的应用示例
- PHP使用smarty模板引擎
- php模板引擎smarty的安装与使用
- 使用smarty 缓存的简单例子
- 简单使用Smarty
- 模糊搜索(searchBar)
- iOS UIViewController
- Activity 完整生命周期及其逻辑图
- 七个最好的职业建议(来自阮一峰的博客)
- RecyclerView使用详解(一)
- 视图引擎Smarty的简单使用
- 爱奇艺牵手环球音乐再发力视频付费服务(来源:数娱梦工厂)
- Topcoder SRM 683 Div2 - C
- iOS 框架
- Windows下Python及Scrapy的安装
- RecyclerView使用详解(二)
- [Android] animated-rotate简单的转菊花...
- win7下MYSQL5.6主从配置
- window 窗口