在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库文件
Smarty-v.e.r/
libs/
Smarty.class.php
debug.tpl
sysplugins/* (everything)
plugins/* (everything)
Smarty的SMARTY_DIR
常�,是定义
Smarty库文件libs/目录的
完整系统路径。
一般æ�¥è¯´ï¼Œå¦‚æžœä½ çš„ç¨‹åº�å�¯ä»¥æ‰¾åˆ°Smarty.class.php文件,
é‚£ä¹ˆä½ ä¸�需è¦�设置SMARTY_DIR,
Smarty会自行进行赋值。
然而,如果Smarty.class.php文件ä¸�åœ¨ä½ çš„
include_path内,
æˆ–è€…ä½ ä¸�能在程åº�ä¸ä½¿ç”¨ç»�å¯¹è·¯å¾„çš„æ—¶å€™ï¼Œé‚£ä¹ˆä½ éœ€è¦�定义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/');
// hack version example that works on both *nix and windows
// 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. 用�对路径引用库文件
<?php
// *nix style (note capital 'S')
require_once('/usr/local/lib/Smarty-v.e.r/libs/Smarty.class.php');
// windows style
require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php');
$smarty = new Smarty();
?>
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\"
Example 2.5. 通过函数ini_set()
�设置include path
<?php
// *nix
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'/usr/local/lib/Smarty-v.e.r/libs/');
// windows
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'c:/webroot/lib/Smarty-v.e.r/libs/');
?>
现在,库文件已ç»�放好了,å�¯ä»¥å¼€å§‹ä¸ºä½ 的程åº�é…�ç½®Smarty了:
Smarty��置四个目录,默认�称分别是
templates/,templates_c/,configs/和cache/。这些都分别对应Smarty类的属性定义
$template_dir,$compile_dir,$config_dir, å’Œ$cache_dir。强烈建议分别在æ¯�个使用Smarty的程åº�ä¸éƒ½å�•独定义这些目录。
ä½ å�¯ä»¥é€šè¿‡
testInstall()�测试Smarty是�有��读写这些目录。
在下é�¢çš„安装例å�ä¸ï¼Œæˆ‘们将为一个留言本程åº�建立Smarty环境。
我们æ��供了一个目录命å��约定的例å�。
ä½ å�¯ä»¥ä¸ºä»»ä½•的程åº�建立å�Œæ ·çš„环境,仅需è¦�修改guestbook/å��称。
Example 2.6. 目录文件结构
/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�务器用户有��读写它们。
Note
通常是用户“nobody� 和组“nobody�.
OS X用户,默认用户是“www�和组“www�.
å¦‚æžœä½ ä½¿ç”¨Apacheï¼Œä½ å�¯ä»¥çœ‹çœ‹ä½ çš„httpd.conf
�确定是使用什么用户和组的。
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的实例,给模�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');
?>
说明
在我们的例å�ä¸ï¼Œæˆ‘们为Smarty的目录使用了ç»�对路径。
如果/web/www.example.com/guestbook/åœ¨ä½ PHPçš„include_path内,
那么,这些设置�是必须的。
然而,设置��对路径,是更高效和更�容易出错(�自�验)。
è¿™å�¯ä»¥ä¿�è¯�Smarty的目录路径被设置æˆ�æ£ç¡®çš„。
现在,用�览器访问index.php文件。
ä½ å�¯ä»¥çœ‹åˆ°"Hello Ned, welcome to Smarty!"
ä½ å·²ç»�完æˆ�了Smarty的基础安装ï¼�
