基础安装

在Smarty发行包中,目录/libs/ 里面的文件就是Smarty的库文件。 库文件都是.php文件,开发者不应该编辑它们。 库文件可以多个应用程序共用,而且只在升级新版本的Smarty时进行覆盖。

下面的例子Smarty的库文件被解压:

  • /usr/local/lib/Smarty-v.e.r/ 在 *nix 的环境

  • 以及 c:\webroot\libs\Smarty-v.e.r\ 在 windows 环境.


Example 2.1. 载入Smarty库文件

  1. Smarty-v.e.r/
  2. libs/
  3. Smarty.class.php
  4. debug.tpl
  5. sysplugins/* (everything)
  6. plugins/* (everything)
  7.  

Smarty的SMARTY_DIR 常量,是定义Smarty库文件libs/目录的完整系统路径。一般来说,如果你的程序可以找到Smarty.class.php文件,那么你不需要设置SMARTY_DIR,Smarty会自行进行赋值。然而,如果Smarty.class.php文件不在你的include_path内,或者你不能在程序中使用绝对路径的时候,那么你需要定义SMARTY_DIRSMARTY_DIR 必须以斜杠(/)结尾。.

在PHP中实例化Smarty对象的方法:

  1. <?php
  2. // NOTE: Smarty has a capital 'S'
  3. require_once('Smarty.class.php');
  4. $smarty = new Smarty();
  5. ?>
  6.  

运行上面的程序。如果发生错误提示说找不到Smarty.class.php文件, 那么你需要按下面的其中一种方法来处理:


Example 2.2. 手动指定 SMARTY_DIR 常量

  1. <?php
  2. // *nix style (note capital 'S')
  3. define('SMARTY_DIR', '/usr/local/lib/Smarty-v.e.r/libs/');
  4.  
  5. // windows style
  6. define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
  7.  
  8. // hack version example that works on both *nix and windows
  9. // Smarty is assumend to be in 'includes/' dir under current script
  10. define('SMARTY_DIR',str_replace("\\","/",getcwd()).'/includes/Smarty-v.e.r/libs/');
  11.  
  12. require_once(SMARTY_DIR . 'Smarty.class.php');
  13. $smarty = new Smarty();
  14. ?>
  15.  


Example 2.3. 用绝对路径引用库文件

  1. <?php
  2. // *nix style (note capital 'S')
  3. require_once('/usr/local/lib/Smarty-v.e.r/libs/Smarty.class.php');
  4.  
  5. // windows style
  6. require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php');
  7.  
  8. $smarty = new Smarty();
  9. ?>
  10.  


Example 2.4. 将库文件路径增加到php.ini 文件

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; Paths and Directories ;
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;
  4.  
  5. ; *nix: "/path1:/path2"
  6. include_path = ".:/usr/share/php:/usr/local/lib/Smarty-v.e.r/libs/"
  7.  
  8. ; Windows: "\path1;\path2"
  9. include_path = ".;c:\php\includes;c:\webroot\libs\Smarty-v.e.r\libs\"
  10.  


Example 2.5. 通过函数ini_set()来设置include path

  1. <?php
  2. // *nix
  3. ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'/usr/local/lib/Smarty-v.e.r/libs/');
  4.  
  5. // windows
  6. ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'c:/webroot/lib/Smarty-v.e.r/libs/');
  7. ?>
  8.  

现在,库文件已经放好了,可以开始为你的程序配置Smarty了:

  • Smarty可配置四个目录,默认名称分别是templates/, templates_c/, configs/cache/

  • 这些都分别对应Smarty类的属性定义 $template_dir, $compile_dir, $config_dir, 和 $cache_dir

  • 强烈建议分别在每个使用Smarty的程序中都单独定义这些目录。

  • 你可以通过testInstall() 来测试Smarty是否有权限读写这些目录。

在下面的安装例子中,我们将为一个留言本程序建立Smarty环境。我们提供了一个目录命名约定的例子。你可以为任何的程序建立同样的环境,仅需要修改guestbook/名称。


Example 2.6. 目录文件结构

  1. /usr/local/lib/Smarty-v.e.r/libs/
  2. Smarty.class.php
  3. debug.tpl
  4. sysplugins/*
  5. plugins/*
  6.  
  7. /web/www.example.com/
  8. guestbook/
  9. templates/
  10. index.tpl
  11. templates_c/
  12. configs/
  13. cache/
  14. htdocs/
  15. index.php
  16.  

明确你的web服务器文档根目录。在下面的例子中, 文档根目录是/web/www.example.com/guestbook/htdocs/。Smarty目录仅可以通过Smarty库文件访问,而不能直接被浏览器访问。这样可以避免一些安全问题,强烈建议(但不强制)把这些目录放到WEB服务器文档根目录之外

将会有至少一个文件是放到文档根目录的,这个文件也会被浏览器访问到。 我们将这文件命名为index.php, 放置到文档根目录/htdocs/中。

Smarty需要一些对目录的 读写权限 (windows用户请忽略),包括 $compile_dir$cache_dir 目录 (templates_c/cache/), 所以,要确保web服务器用户有权限读写它们。

Note

通常是用户“nobody” 和组“nobody”. OS X用户,默认用户是“www”和组“www”.如果你使用Apache,你可以看看你的httpd.conf来确定是使用什么用户和组的。


Example 2.7. 设置目录的读写权限

  1. chown nobody:nobody /web/www.example.com/guestbook/templates_c/
  2. chmod 770 /web/www.example.com/guestbook/templates_c/
  3.  
  4. chown nobody:nobody /web/www.example.com/guestbook/cache/
  5. chmod 770 /web/www.example.com/guestbook/cache/
  6.  

说明

chmod 770是比较适当的安全设置,仅允许 用户“nobody”和组“nobody”可以读写访问这些目录。 如果你希望能让所有人都能读取该目录 (大部分是因为你需要方便查看这些目录内的文件), 你可以使用775

我们需要创建文件index.tpl,然后供Smarty显示。 文件需要放到$template_dir目录内。


Example 2.8. /web/www.example.com/guestbook/templates/index.tpl

  1. {* Smarty *}
  2.  
  3. Hello {$name}, welcome to Smarty!
  4.  

技术说明

{ Smarty }是模板的 注释. 虽然不是必须的,但在模板内添加注释这是个很好的习惯。 它可以帮助识别出文件类型,而不需要看后缀。 比如说,代码编辑器可以识别该文件并自动语法高亮。

现在,我们来修改index.php. 我们将创建Smarty的实例,给模板assign()赋值变量, 并且display()显示该模板文件index.tpl


Example 2.9. 修改 /web/www.example.com/docs/guestbook/index.php

  1. <?php
  2.  
  3. require_once(SMARTY_DIR . 'Smarty.class.php');
  4.  
  5. $smarty = new Smarty();
  6.  
  7. $smarty->setTemplateDir('/web/www.example.com/guestbook/templates/');
  8. $smarty->setCompileDir('/web/www.example.com/guestbook/templates_c/');
  9. $smarty->setConfigDir('/web/www.example.com/guestbook/configs/');
  10. $smarty->setCacheDir('/web/www.example.com/guestbook/cache/');
  11.  
  12. $smarty->assign('name','Ned');
  13.  
  14. //** un-comment the following line to show the debug console
  15. //$smarty->debugging = true;
  16.  
  17. $smarty->display('index.tpl');
  18.  
  19. ?>
  20.  

说明

在我们的例子中,我们为Smarty的目录使用了绝对路径。如果/web/www.example.com/guestbook/在你PHP的include_path内,那么,这些设置不是必须的。然而,设置成绝对路径,是更高效和更不容易出错(来自经验)。这可以保证Smarty的目录路径被设置成正确的。

现在,用浏览器访问index.php文件。 你可以看到"Hello Ned, welcome to Smarty!"

你已经完成了Smarty的基础安装!

原文: https://www.smarty.net/docs/zh_CN/installing.smarty.basic.tpl