下面的例子Smarty的库文件被解压:
/usr/local/lib/Smarty-v.e.r/
在 *nix 的环境以及
c:\webroot\libs\Smarty-v.e.r\
在 windows 环境.
Example 2.1. 载入Smarty库文件
Smarty的SMARTY_DIR
,是定义Smarty库文件libs/
目录的完整系统路径。一般来说,如果你的程序可以找到Smarty.class.php
文件,那么你不需要设置SMARTY_DIR
,Smarty会自行进行赋值。然而,如果Smarty.class.php
文件不在你的内,或者你不能在程序中使用绝对路径的时候,那么你需要定义SMARTY_DIR
。 SMARTY_DIR
必须以斜杠(/)结尾。.
在PHP中实例化Smarty对象的方法:
- <?php
- // NOTE: Smarty has a capital 'S'
- require_once('Smarty.class.php');
- $smarty = new Smarty();
- ?>
运行上面的程序。如果发生错误提示说找不到Smarty.class.php
文件, 那么你需要按下面的其中一种方法来处理:
Example 2.2. 手动指定 SMARTY_DIR 常量
- <?php
- // *nix style (note capital 'S')
- define('SMARTY_DIR', '/usr/local/lib/Smarty-v.e.r/libs/');
- // windows style
- define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
- // Smarty is assumend to be in 'includes/' dir under current script
- define('SMARTY_DIR',str_replace("\\","/",getcwd()).'/includes/Smarty-v.e.r/libs/');
- require_once(SMARTY_DIR . 'Smarty.class.php');
- $smarty = new Smarty();
- ?>
Example 2.3. 用绝对路径引用库文件
Example 2.4. 将库文件路径增加到php.ini
文件
- ;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Paths and Directories ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;
- ; *nix: "/path1:/path2"
- include_path = ".:/usr/share/php:/usr/local/lib/Smarty-v.e.r/libs/"
- ; Windows: "\path1;\path2"
- include_path = ".;c:\php\includes;c:\webroot\libs\Smarty-v.e.r\libs\"
- <?php
- // *nix
- // windows
- ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'c:/webroot/lib/Smarty-v.e.r/libs/');
- ?>
现在,库文件已经放好了,可以开始为你的程序配置Smarty了:
Smarty可配置四个目录,默认名称分别是,
templates_c/
,configs/
和cache/
。这些都分别对应Smarty类的属性定义 ,
$compile_dir
, , 和$cache_dir
。强烈建议分别在每个使用Smarty的程序中都单独定义这些目录。
你可以通过 来测试Smarty是否有权限读写这些目录。
在下面的安装例子中,我们将为一个留言本程序建立Smarty环境。我们提供了一个目录命名约定的例子。你可以为任何的程序建立同样的环境,仅需要修改guestbook/
名称。
明确你的web服务器文档根目录。在下面的例子中, 文档根目录是/web/www.example.com/guestbook/htdocs/
。Smarty目录仅可以通过Smarty库文件访问,而不能直接被浏览器访问。这样可以避免一些安全问题,强烈建议(但不强制)把这些目录放到WEB服务器文档根目录之外。
将会有至少一个文件是放到文档根目录的,这个文件也会被浏览器访问到。 我们将这文件命名为index.php
, 放置到文档根目录/htdocs/
中。
Smarty需要一些对目录的 读写权限 (windows用户请忽略),包括 和 目录 (templates_c/
和 cache/
), 所以,要确保web服务器用户有权限读写它们。
Example 2.7. 设置目录的读写权限
- chown nobody:nobody /web/www.example.com/guestbook/templates_c/
- chmod 770 /web/www.example.com/guestbook/templates_c/
- chown nobody:nobody /web/www.example.com/guestbook/cache/
- chmod 770 /web/www.example.com/guestbook/cache/
chmod 770
是比较适当的安全设置,仅允许 用户“nobody”和组“nobody”可以读写访问这些目录。 如果你希望能让所有人都能读取该目录 (大部分是因为你需要方便查看这些目录内的文件), 你可以使用775
。
我们需要创建文件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的实例,给模板赋值变量, 并且display()
显示该模板文件index.tpl
。
Example 2.9. 修改 /web/www.example.com/docs/guestbook/index.php
在我们的例子中,我们为Smarty的目录使用了绝对路径。如果/web/www.example.com/guestbook/
在你PHP的include_path内,那么,这些设置不是必须的。然而,设置成绝对路径,是更高效和更不容易出错(来自经验)。这可以保证Smarty的目录路径被设置成正确的。
现在,用浏览器访问文件。 你可以看到"Hello Ned, welcome to Smarty!"
你已经完成了Smarty的基础安装!