SMARTY(2)

2019-09-02 00:47

接下来我们在 templates 资料夹下放置一个 test.htm:(扩展名叫什么都无所谓,但便于视觉设计师开发,笔者都还是以 .htm 为主。)

templates/test.htm:

<{$title}> <{$content}>

现在我们要将上面的模版显示出来,并将网页标题 ($title) 与内容 ($content) 更换,请将以下档案内容命名为 test.php ,并放置在主资料夹下:

test.php:

require \

$tpl->assign(\测试用的网页标题\ $tpl->assign(\测试用的网页内容\ // 上面两行也可以用这行代替

// $tpl->assign(array(\测试用的网页标题\测试用的网页内容\

$tpl->display('test.htm'); ?>

请打开浏览器,输入 http://localhost/demo/test.php 试试看(依您的环境决定网址),应该会看到以下的画面:

再到 templates_c 底下,我们会看到一个奇怪的资料夹 (%9) ,再点选下去也是一个奇怪的资料夹 (%98044067) ,而其中有一个档案:

templates_c/%9/%98044067/test.htm.php:

_tpl_vars['title']; ?>

_tpl_vars['content']; ?>

没错,这就是 Smarty 编译过的档案。它将我们在模版中的变量转换成了 PHP 的语法来执行,下次再读取同样的内容时, Smarty 就会直接抓取这个档案来执行了。

最后我们整理一下整个 Smarty 程序撰写步骤:

Step 1. 加载 Smarty 模版引擎。

Step 2. 建立 Smarty 对象。

Step 3. 设定 Smarty 对象的参数。

Step 4. 在程序中处理变量后,再用 Smarty 的 assign 方法将变量置入模版里。

Step 5. 利用 Smarty 的 display 方法将网页秀出。

如何安排你的程序架构

上面我们看到除了 Smarty 所需要的资料夹外 (class 、 configs 、 templates 、 templates_c) ,还有两个资料夹: includes 、 modules 。其实这是笔者模仿 XOOPS 的架构所建立出来的,因为 XOOPS 是笔者所接触到的程序中,少数使用 Smarty 模版引擎的架站程序。所谓西瓜偎大边,笔者这样的程序架构虽没有 XOOPS 的百分之一强,但至少给人看时还有 XOOPS 撑腰。

includes 这个资料夹主要是用来放置一些 function 、 sql 檔,这样在 main.php 就可以将它们引入了,如下:

main.php:

include \

define('__SITE_ROOT', 'd:/appserv/web/demo'); // 最后没有斜线 // 以 main.php 的位置为基准

require_once \ require_once \ $tpl = new Smarty();

$tpl->template_dir = __SITE_ROOT . \ $tpl->compile_dir = __SITE_ROOT . \ $tpl->config_dir = __SITE_ROOT . \ $tpl->cache_dir = __SITE_ROOT . \ $tpl->left_delimiter = '<{'; $tpl->right_delimiter = '}>'; ?>

modules 这个资料夹则是用来放置程序模块的,如此一来便不会把程序丢得到处都是,整体架构一目了然。

上面我们也提到 main.php ,这是整个程序的主要核心,不论是常数定义、外部程序加载、共享变量建立等,都是在这里开始的。所以之后的模块都只要将这个档案包含进来就可

以啦。因此在程序流程规划期间,就必须好好构思 main.php 中应该要放那些东西;当然利用 include 或 require 指令,把每个环节清楚分离是再好不过了。

在上节提到的 Smarty 程序 5 步骤, main.php 就会帮我们先将前 3 个步骤做好,后面的模块程序只要做后面两个步骤就可以了。

从变量开始

如何使用变量

从上一章范例中,我们可以清楚地看到我们利用 <{ 及 }> 这两个标示符号将变量包起来。预设的标示符号为 { 及 } ,但为了中文冲码及 Javascript 的关系,因此笔者还是模仿 XOOPS ,将标示符号换掉。变量的命名方式和 PHP 的变量命名方式是一模一样的,前面也有个 $ 字号 (这和一般的模版引擎不同)。标示符号就有点像是 PHP 中的 (事实上它们的确会被替换成这个) ,所以以下的模版变量写法都是可行的:

1. <{$var}>

2. <{ $var }>

3. <{$var

}>

在 Smarty 里,变量预设是全域的,也就是说你只要指定一次就好了。指定两次以上的话,变量内容会以最后指定的为主。就算我们在主模版中加载了外部的子模版,子模版中同样的变量一样也会被替代,这样我们就不用再针对子模版再做一次解析的动作。

而在 PHP 程序中,我们用 Smarty 的 assign 来将变量置放到模版中。 assign 的用

法官方手册中已经写得很多了,用法就如同上一节的范例所示。不过在重复区块时,我们就必须将变量做一些手脚后,才能将变量 assign 到模版中,这在下一章再提。

修饰你的变量

上面我们提到 Smarty 变量呈现的风貌是由模版自行决定的,所以 Smarty 提供了许多修饰变量的函式。使用的方法如下:

<{变量|修饰函式}>

<{变量|修饰函式:\参数(非必要,视函式而定)\当修饰函式有参数时 --> 范例如下:

<{$var|nl2br}>

<{$var|string_format:\将变量格式化 -->

好,那为什么要让模版自行决定变量呈现的风貌?先看看底下的 HTML ,这是某个购物车结帐的部份画面。

总金额:21,000 元

一般模版引擎的模版可能会这样写:

总金额:{format_total} 元 它们的 PHP 程序中要这样写:

$total = 21000;

$tpl->assign(\

$tpl->assign(\ ?>

而 Smarty 的模版就可以这样写: (number_format 修饰函式请到Smarty 官方网页下载)

总金额:<{$total|number_format:\元 Smarty 的 PHP 程序中只要这样写:


SMARTY(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:日本语ネットワーク技术用语1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: