Smarty模板引擎
Smarty模板引擎是一个PHP模板引擎,是一个从应用程序中剥离表现层的工具,是一种从程序逻辑层(PHP)抽出外在(HTML/CSS)描述的php框架,即分开了程序逻辑和外在的内容
安装Smarty及初始化
- 下载Smarty之后,将libs文件夹放在应用程序根目录
- 使用require()语句,将libs文件夹中的Smarty.class.php文件导入进来
<?php
require("./libs/Smarty.class.php");
#创建一个实例
$smarty=new Smarty();
?>
- 初始化Smarty类库的默认设置
- 创建一个文件,用于集中设置Smarty的各种属性,文件名称为init.inc.php
<?php
require("./libs/Smarty.class.php");
#创建一个实例
$smarty=new Smarty();
$smarty->setTemplateDir("./template/");
$smarty->setCompileDir("./template/template_c/");
$smarty->setPluginsDir("./template/plugins/");
$smarty->setCacheDir("./template/cache/");
$smarty->setConfigDir("./template/configs/");
$smarty->caching=false;
$smarty->cache_lifetime=60*60*24;
$smarty->left_delimiter='<{';
$smarty->right_delimiter='}>';
?>
- 创建一个模板文件test.htm
<!DOCTYPE html>
<html>
<head>
<title>${title}</title>
</head>
<body>
${content}
</body>
</html>
- 创建模板的程序逻辑
<?php
require("init.inc.php");
#替换变量
$smarty->assign("title","Smart实例");
#替换变量
$smarty->assign("content","hello,siqu");
#调用模板,显示结果
$smarty->display("test.htm");
?>
Smarty的基本应用
- assign()方法
可以传递一对名称/数值对,也可以传递相关联的数组
- display()方法
在基于Smarty的脚本中必须使用这个方法,并且只能使用一次,因为它负责获取和显示由Smarty引擎引用的模板
- 第二个参数可选,指定缓存标识符的名称
- 第三个参数在维护一个页面的多个缓存时使用
Smarty模板设计的基本语法
模板中的注释
模板中的复杂变量
- 可以使用数字或非数字索引,使用PHP原生语法风格引用索引数组
- 在模板中访问关联数组,可以使用PHP原生语法风格,也可以使用”.“来进行访问
- 在模板中使用PHP分配的变量时,可以通过”->“后接指定的属性名或者方法的方式访问PHP分配的成员,和PHP中访问对象的成员或者方法完全一致
- 可以在模板中使用表达式,甚至是函数
<{$x+$y}>
<{$lenth=strlen($str)}>
<{$lenth}>
- smarty可以识别嵌入在双引号当中的变量,只要此变量只包含数字、字符、下划线和[],对于其他的符号,必须使用两个反引号“””来包裹住
- 模板中可是使用可变变量
$foo_{$bar}
模板中的函数应用
- 直接在模板中调用PHP中的函数
<?php
require("init.inc.php");
function myfun(){
return date("H:i:s");
}
$smarty->display("test.htm");
?>
<!DOCTYPE html>
<html>
<head>
<title>函数应用</title>
</head>
<body>
<{myfun()}>
</body>
</html>
- 调用smarty内置函数,或者插件时,使用标签的方式调用函数,标签名相当于函数名,标签属性,相当于是函数参数
{functname atrr1="value" atrr1="value"}
- 块函数应用,需要使用闭合标签
属性
Smarty函数的属性,相当于是函数的参数,静态属性不需要添加引号
忽略smarty引擎解析
- 如果“{”和“}”之间有空格,那么{}里面的内容会被忽略解析
- 使用内置的{literal}{/literal}块函数,块中的内容会被smarty忽略解析
Smarty模板中的变量应用
- 使用assign()函数将PHP中的变量分配到Smarty模板当中
- 从配置文件中读取变量
- 在模板中使用保留变量,直接在模板中访问请求变量(get、post、cookies、session、env),这些变量都保存在{$smarty}数组中
<?php
require("init.inc.php");
session_start();
$_SESSION["name"]="siqu";
$smarty->display("test.htm");
?>
<!DOCTYPE html>
<html>
<head>
<title>函数应用</title>
</head>
<body>
<{$smarty.session.name}>
</body>
</html>
以下是保留变量表
在Smarty模板中的变量调解器
变量调节器是在变量输出之前,对变量进行相应的调整
变量调解器的语法
在使用调解器之前,需要先设置或者添加插件目录配置,需要在init.inc.php中进行修改,添加libs文件下的plugins文件夹
<?php
require("init.inc.php");
$smarty->assign("name","siqu");
$smarty->display("test.htm");
?>
<!DOCTYPE html>
<html>
<head>
<title>调解器应用</title>
</head>
<body>
<{$name|upper}>
</body>
</html>
内置的调解器
自定义变量调解器插件
- 使用registerPlugin()方法
注册一个名为mystyle的调解器,主要有三个参数,变量名、颜色和大小
'.$var.'';
}
#替换变量
$smarty->assign("name","siqu");
#注册调解器,第一个参数modifier,第二个参数调解器名称,第三个参数要执行的PHP函数
$smarty->registerPlugin("modifier","mystyle","test");
$smarty->display("test.htm");
?>
<!DOCTYPE html>
<html>
<head>
<title>函数应用</title>
</head>
<body>
<{$name|mystyle:"red":20}>
</body>
</html>
- 使用文件插件的形式添加调解器
-
注意调解器所在的位置,最好使用$smarty->addPluginsDir( )添加一个自己的调解器插件目录
-
文件命名为:modifier.修改器名称.php
-
声明修改器的插件需要使用:smarty_modifier_修改器名称()来进行声明
-
参数规则:第一个参数固定为变量,修改器要用到的参数,从第二个参数开始
文件:modifier.mystyle.php
<?php
function smarty_modifier_mystyle($var,$color,$size){
return '<font color="'.$color.'" size="'.$size.'">'.$var.'</font>';
}
?>
运行效果与上例一致
Smarty模板中自定义函数
smarty中的函数能够想标签一样直接使用,简单方便,并且能够快速应用,简化重复代码
为smarty模板扩充函数插件
只需要使用registerPlugin()
注册即可,在第一个参数使用function进行注册,第二、第三个参数与注册修改器一致,在函数声明上,模板中传递的所有参数都在第一个参数当中的关联数组中,第二个参数是用来接收自动传入的Smarty对象
<?php
require("init.inc.php");
function printName($params,$smarty){
return "hello,".$params["name"];
}
$smarty->registerPlugin("function","printname","printName");
$smarty->display("test.htm");
?>
<{printname name="siqu"}>
利用文件插件的方式注册插件,在插件目录中命名规则为function.函数名.php
,函数声明使用smarty_function_函数名($params,$smarty)
下面是文件function.printname.php
<?php
function smarty_function_printname($params,$smarty){
return "hello,".$params["name"];
}
?>
下面是index.php
<?php
require("init.inc.php");
$smarty->display("test.htm");
?>
为smarty模板扩充块函数插件
块函数的形式是这样的:{func}…{/func}。函数会被Smarty调用两次,一次是在开始标签,另一次是在闭合标签,两种方式定义
- 使用registerPlugin进行定义,第一个参数使用block
- 使用block.块函数名.php,的结构进行定义,函数声明用smart_block_块函数名($params,$content,$smarty,&$repeat),只有块函数的开始标签具有属性
- 所有参数都在$params这个关联数组当中
- $content变量值取决于你的函数是被开始标签调用还是被闭合标签使用,假如是开始标签,则为NULL,如果是闭合标签,则$content变量值为模板块的内容,所接受到模板的输出而不是模板资源
- &$repeat参数通过引用传递给函数执行,并为其提供控制块显示多少次的可能性。在首次调用块函数(块开始标签)时&$repeat变量为true,在随后的所有块函数(闭合标签)调用中其值为false,函数每次执行返回的&$repeat值为true时,{true}…{/true}之间的内容会被求值,同时参数$content里的新块内容会再次调用执行函数(运行方法有点类似于递归函数),如果你嵌套了块函数,可以通过$smarty->_tag_stack变量访问找出父块函数
暂无评论内容