PHP程序员站--PHP编程开发平台
 当前位置:主页 >> PHP基础 >> 基础文章 >> 

Smarty入门教程

Smarty入门教程

来源:互联网  作者:网络转载  发布时间:2008-08-22
刚开始接触模版引擎的 PHP 设计师,听到 Smarty 时,都会觉得很

  
  如何安排你的程序架构
  
  上面我们看到除了 Smarty 所需要的资料夹外 (class 、 configs 、 templates 、 templates_c) ,还有两个资料夹: includes 、 modules 。其实这是笔者模仿 XOOPS 的架构所建立出来的,因为 XOOPS 是笔者所接触到的程序中,少数使用 Smarty 模版引擎的架站程序。所谓西瓜偎大边,笔者这样的程序架构虽没有 XOOPS 的百分之一强,但至少给人看时还有 XOOPS 撑腰。
  
  includes 这个资料夹主要是用来放置一些 function 、 sql 檔,这样在 main.php 就可以将它们引入了,如下:
  
  main.php:
  
  <?php
  include "class/Smarty.class.php";
  define('__SITE_ROOT', 'd:/appserv/web/demo'); // 最后没有斜线
  // 以 main.php 的位置为基准
  require_once "includes/functions.php";
  require_once "includes/include.php";
  $tpl = new Smarty();
  $tpl->template_dir = __SITE_ROOT . "/templates/";
  $tpl->compile_dir = __SITE_ROOT . "/templates_c/";
  $tpl->config_dir = __SITE_ROOT . "/configs/";
  $tpl->cache_dir = __SITE_ROOT . "/cache/";
  $tpl->left_delimiter = '<{';
  $tpl->right_delimiter = '}>';
  ?>
  
  modules 这个资料夹则是用来放置程序模块的,如此一来便不会把程序丢得到处都是,整体架构一目了然。
  
  上面我们也提到 main.php ,这是整个程序的主要核心,不论是常数定义、外部程序加载、共享变量建立等,都是在这里开始的。所以之后的模块都只要将这个档案包含进来就可以啦。因此在程序流程规划期间,就必须好好构思 main.php 中应该要放那些东西;当然利用 include 或 require 指令,把每个环节清楚分离是再好不过了。
  

 


  在上节提到的 Smarty 程序 5 步骤, main.php 就会帮我们先将前 3 个步骤做好,后面的模块程序只要做后面两个步骤就可以了。
  
  从变量开始
  
  如何使用变量
  
  从上一章范例中,我们可以清楚地看到我们利用 <{ 及 }> 这两个标示符号将变量包起来。预设的标示符号为 { 及 } ,但为了中文冲码及 Javascript 的关系,因此笔者还是模仿 XOOPS ,将标示符号换掉。变量的命名方式和 PHP 的变量命名方式是一模一样的,前面也有个 $ 字号 (这和一般的模版引擎不同)。标示符号就有点像是 PHP 中的 <?php 及 ?> (事实上它们的确会被替换成这个) ,所以以下的模版变量写法都是可行的:
  
  1. <{$var}>
  
  2. <{ $var }> <!-- 和变量之间有空格 -->
  
  3. <{$var
  
  }> <!-- 启始的标示符号和结束的标示符号不在同一行 -->
  在 Smarty 里,变量预设是全域的,也就是说你只要指定一次就好了。指定两次以上的话,变量内容会以最后指定的为主。就算我们在主模版中加载了外部的子模版,子模版中同样的变量一样也会被替代,这样我们就不用再针对子模版再做一次解析的动作。


  
  而在 PHP 程序中,我们用 Smarty 的 assign 来将变量置放到模版中。 assign 的用法官方手册中已经写得很多了,用法就如同上一节的范例所示。不过在重复区块时,我们就必须将变量做一些手脚后,才能将变量 assign 到模版中,这在下一章再提。
  
  修饰你的变量
  
  上面我们提到 Smarty 变量呈现的风貌是由模版自行决定的,所以 Smarty 提供了许多修饰变量的函式。使用的方法如下:
  
  <{变量|修饰函式}> <!-- 当修饰函式没有参数时 -->
  
  <{变量|修饰函式:"参数(非必要,视函式而定)"}> <!-- 当修饰函式有参数时 -->
  范例如下:
  
  <{$var|nl2br}> <!-- 将变量中的换行字符换成 <br /> -->
  
  <{$var|string_format:"%02d"}> <!-- 将变量格式化 -->
  好,那为什么要让模版自行决定变量呈现的风貌?先看看底下的 HTML ,这是某个购物车结帐的部份画面。
  
  <input name="total" type="hidden" value="21000" />


  
  总金额:21,000 元
  一般模版引擎的模版可能会这样写:
  
  <input name="total" type="hidden" value="{total}" />
  
  总金额:{format_total} 元
  它们的 PHP 程序中要这样写:
  
  <?php
  $total = 21000;
  $tpl->assign("total", $total);
  $tpl->assign("format_total", number_format($total));
  ?>
  
  而 Smarty 的模版就可以这样写: (number_format 修饰函式请到Smarty 官方网页 下载)
  
  <input name="total" type="hidden" value="<{$total}>" />
  
  总金额:<{$total|number_format:""}> 元
  Smarty 的 PHP 程序中只要这样写:
  
  <?php
  $total = 21000;
  $tpl->assign("total", $total);
  ?>
  
  所以在 Smarty 中我们只要指定一次变量,剩下的交给模版自行决定即可。这样了解了吗?这就是让模版自行决定变量呈现风貌的好处!

Tags: smarty   教程   入门   smarty   变量   程序   array  
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号