Smarty 是PHP的一个模板引擎,是由Monte Ohrt 和 Andrei Zmievski 使用PHP语言开发的,发展至今已成为一个非常流行的模板引擎,Smarty 提供了一种易于管理和使用的方法,将PHP代码从HMTL代码页面中分享出来,使用程序员与页面美工之间的分工更加明确,大大提高团队的开发效率。
1、要使用Smarty 可到官方网站http://www.smarty.net 去下载,smary2.x 和3.x区别:
【转】Smarty 3 API 的语法结构已经重构,使之更一致性和模块化,虽然为了向下兼容,仍然支持Smarty 2的语法,但会抛出一个被弃用的notice,虽然你可以屏蔽该notice,但强烈建议,在使用Smarty 3 时使用3的语法,一方面,Smarty 2的语法很可能在后面的版本中逐渐被取消,另一方面, Smarty2的语法,是对Smarty3的API的封装,所以性能方面也会有损失。 以下是 Smarty3与Smarty2的差别之处
1) 基本上,Smarty3的方法采用驼峰式的命名方式,如 fooBarBaz ;
2) 所有Smarty的属性都有get 和 set 的方法 如$smarty->cache_dir = ‘foo/’ 现在可以这样赋值 $smarty->setCacheDir(‘foo/‘),同样可以通过 $smarty->getCacheDir() 来得到该属性值 ;
3) Smarty 3废除了一些如 ”is*”的方法,因为他们和现在的”get*”方法重复了 ;
4) Smarty 3 只能在PHP5下运行,不支持PHP4.;
5) {php} 标签默认是关闭的. 使用$smarty->allow_php_tag=true.开启 ;
6) 被空白包围的分隔符将不被解析,如{ foo }将不再作为smarty标签被解析,你必须使用{foo} 。
转自:http://www.5dcode.com/?p=339
下载完成按以下步骤安装:
(1) 将下载完的 Smarty 压缩包解压到一个指定位置,比如C:/Smarty
(2) 因为在程序中要用到
Smarty 的类库,而Smarty 类文件是位于 libs 文件夹下的Smarty.class.php文件,所以需要修改 PHP的配置文件 Php.ini
文件:查找 include_path 项,在下面添加 include_path = " .; c:/smarty/libs
",注意,多个路径可用分号隔开,因为新添加的路径会覆盖上面的路径设置。
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
;
Windows: "\path1;\path2"
include_path=".;F:\xampp\php\PEAR"
改为:
; Windows:
"\path1;\path2"
include_path=".;F:\xampp\php\PEAR;F:\programFiles\Smarty-3.1.16\libs"
页面引用时: require ( ‘ Smarty.class.php‘
);
(3) 另一种做法是手动设置SMARTY_DIR常量,例如:
define ( ‘ SMARTY_DIR‘ ,‘
/usr/local/lib/php/Smarty/ libs/‘ );
require ( SMARTY_DIR.‘ Smarty.class.php‘
);
(4) 还有一种做法是引用库文件的绝对路径,不推荐使用,代码如下:
require (
‘/usr/local/lib/php/Smarty/libs/Smarty.class.php‘ );
[
注意:其中路径以实际安装路径为准,文中只做参考。]
在PHP中实例化Smarty对象的方法:
<?php // NOTE: Smarty has a capital ‘S‘ require_once(‘Smarty.class.php‘); $smarty = new Smarty(); ?>
现在,库文件已经放好了,可以开始为你的程序配置Smarty了:
-
Smarty可配置四个目录,默认名称分别是
templates/
,templates_c/
,configs/
和cache/
。 -
这些都分别对应Smarty类的属性定义
$template_dir
,$compile_dir
,$config_dir
, 和$cache_dir
。 -
强烈建议分别在每个使用Smarty的程序中都单独定义这些目录。
-
你可以通过
testInstall()
来测试Smarty是否有权限读写这些目录。
在下面的安装例子中,我们将为一个留言本程序建立Smarty环境。 我们提供了一个目录命名约定的例子。
你可以为任何的程序建立同样的环境,仅需要修改guestbook/
名称。
/usr/local/lib/Smarty-v.e.r/libs/ Smarty.class.php debug.tpl sysplugins/* plugins/* /web/www.example.com/ guestbook/ templates/ index.tpl templates_c/ configs/ cache/ htdocs/ index.php
明确你的web服务器文档根目录。在下面的例子中, 文档根目录是/web/www.example.com/guestbook/htdocs/
。
Smarty目录仅可以通过Smarty库文件访问,而不能直接被浏览器访问。 这样可以避免一些安全问题,强烈建议(但不强制)把这些目录
放到WEB服务器文档根目录之外。
将会有至少一个文件是放到文档根目录的,这个文件也会被浏览器访问到。
我们将这文件命名为index.php
,
放置到文档根目录/htdocs/
中。
Smarty需要一些对目录的 读写权限 (windows用户请忽略),包括 $compile_dir
和$cache_dir
目录 (templates_c/
和 cache/
), 所以,要确保web服务器用户有权限读写它们。
我们需要创建文件index.tpl
,然后供Smarty显示。 文件需要放到 $template_dir
目录内。
Example 2.8. /web/www.example.com/guestbook/templates/index.tpl
{* Smarty *} Hello {$name}, welcome to Smarty!
{* Smarty *}
是模板的 注释.
虽然不是必须的,但在模板内添加注释这是个很好的习惯。 它可以帮助识别出文件类型,而不需要看后缀。
比如说,代码编辑器可以识别该文件并自动语法高亮。
现在,我们来修改index.php
. 我们将创建Smarty的实例,给模板assign()
赋值变量,
并且display()
显示该模板文件 index.tpl
。
Example 2.9. 修改 /web/www.example.com/docs/guestbook/index.php
<?php require_once(SMARTY_DIR . ‘Smarty.class.php‘); $smarty = new Smarty(); $smarty->setTemplateDir(‘/web/www.example.com/guestbook/templates/‘) $smarty->setCompileDir(‘/web/www.example.com/guestbook/templates_c/‘); $smarty->setConfigDir(‘/web/www.example.com/guestbook/configs/‘); $smarty->setCacheDir(‘/web/www.example.com/guestbook/cache/‘); $smarty->assign(‘name‘,‘Ned‘); //** un-comment the following line to show the debug console //$smarty->debugging = true; $smarty->display(‘index.tpl‘); ?>
(上面的setTemplateDir等不写都默认是这几个文件夹,所以不写也可以)
说明
在我们的例子中,我们为Smarty的目录使用了绝对路径。 如果/web/www.example.com/guestbook/
在你PHP的include_path内,
那么,这些设置不是必须的。 然而,设置成绝对路径,是更高效和更不容易出错(来自经验)。 这可以保证Smarty的目录路径被设置成正确的。
现在,用浏览器访问index.php
文件。 你可以看到"Hello
Ned, welcome to Smarty!"
你已经完成了Smarty的基础安装!
参考了:http://www.smarty.net/docs/zh_CN/installing.smarty.basic.tpl
稍微更灵活的方式是使用扩展类来安装Smarty和初始化。 代替反复地定义路径,赋同样的值等等,我们可以把这些操作放在一个地方进行。
我们新建一个目录/php/includes/guestbook/
,并新建一个 setup.php
文件。
在下面的例子中,我们假设/php/includes
目录已经在include_path
中。
确定你已经进行这个配置,或者使用绝对路径。
<?php // load Smarty library require(‘Smarty.class.php‘); // The setup.php file is a good place to load // required application library files, and you // can do that right here. An example: // require(‘guestbook/guestbook.lib.php‘); class Smarty_GuestBook extends Smarty { function __construct() { // Class Constructor. // These automatically get set with each new instance. parent::__construct(); $this->setTemplateDir(‘/web/www.example.com/guestbook/templates/‘); $this->setCompileDir(‘/web/www.example.com/guestbook/templates_c/‘); $this->setConfigDir(‘/web/www.example.com/guestbook/configs/‘); $this->setCacheDir(‘/web/www.example.com/guestbook/cache/‘); $this->caching = Smarty::CACHING_LIFETIME_CURRENT; $this->assign(‘app_name‘, ‘Guest Book‘); } } ?>
在index.php
文件中使用setup.php
: