当前位置:首页 > PHP教程 > Zend > 列表

Zend Framework框架Smarty扩展实现方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-20 22:18:29 浏览: 评论:0 

这篇文章主要介绍了Zend Framework框架Smarty扩展实现方法,结合实例形式较为详细的分析了Zend Framework框架Smarty扩展的具体步骤与相关设置技巧,需要的朋友可以参考下。

本文实例讲述了Zend Framework框架Smarty扩展实现方法,分享给大家供大家参考,具体如下:

今天总结一下ZF框架中扩展Smarty模板的方法,在ZF帮助文档中已经有比较详细的介绍,在这我稍微多说一些。

一.将smarty的核心文件包放在lib文件夹下,文件包中要包括(internals/,plugins/,Config_File.class.php,Smarty.class.php,Smarty_Compiler.class.php,debug.tpl).

二.在Zend/View下添加文件:Smarty.php ,文件的内容如下:

  1. <?php 
  2. /** 
  3. * Zend_View_Interface 
  4. */ 
  5. require_once 'Zend/View/Interface.php'
  6. /** 
  7. * Smarty  
  8. */ 
  9. require_once("smarty/Smarty.class.php"); 
  10. /** 
  11. * 创建Smarty视图 
  12. */ 
  13. class Zend_View_Smarty implements Zend_View_Interface 
  14.   /** 
  15.    * Smarty object 
  16.    * @var Smarty 
  17.    */ 
  18.   protected $_smarty
  19.   /** 
  20.    * Constructor 
  21.    * 
  22.    * @param string $tmplPath 
  23.    * @param array $extraParams 
  24.    * @return void 
  25.    */ 
  26.   public function __construct($tmplPath = null, $extraParams = array()) 
  27.   { 
  28.     $this->_smarty = new Smarty; 
  29.     if (null !== $tmplPath) { 
  30.       $this->setScriptPath($tmplPath); 
  31.     } 
  32.     foreach ($extraParams as $key => $value) { 
  33.       $this->_smarty->$key = $value
  34.     } 
  35.   } 
  36.   /** 
  37.    * Return the template engine object   
  38.    * 
  39.    * @return Smarty 
  40.    */ 
  41.   public function getEngine() 
  42.   { 
  43.     return $this->_smarty; 
  44.   } 
  45.   /** 
  46.    * Set the path to the templates 
  47.    * 
  48.    * @param string $path The directory to set as the path. 
  49.    * @return void 
  50.    */ 
  51.   public function setScriptPath($path
  52.   { 
  53.     if (is_readable($path)) { 
  54.       $this->_smarty->template_dir = $path
  55.       return
  56.     } 
  57.     throw new Exception('Invalid path provided'); 
  58.   } 
  59.   /** 
  60.   * set smarty缓存 
  61.   * @author lengfeng 
  62.   */ 
  63.   public function setCompilePath($path){ 
  64.     if (is_readable($path)) { 
  65.       $this->_smarty->compile_dir = $path
  66.       return
  67.     } 
  68.     throw new Exception('Invalid path provided');     
  69.   } 
  70.   /** 
  71.   * set smarty 编译后文档 
  72.   * @author lengfeng 
  73.   */ 
  74.   public function setCachePath($path){ 
  75.     if (is_readable($path)) { 
  76.       $this->_smarty->cache_dir = $path
  77.       return
  78.     } 
  79.     throw new Exception('Invalid path provided');     
  80.   } 
  81.   /** 
  82.    * Retrieve the current template directory 
  83.    * 
  84.    * @return string 
  85.    */ 
  86.   public function getScriptPaths() 
  87.   { 
  88.     return array($this->_smarty->template_dir); 
  89.   } 
  90.   /** 
  91.    * Alias for setScriptPath 
  92.    * 
  93.    * @param string $path 
  94.    * @param string $prefix Unused 
  95.    * @return void 
  96.    */ 
  97.   public function setBasePath($path$prefix = 'Zend_View'
  98.   { 
  99.     return $this->setScriptPath($path); 
  100.   } 
  101.   /** 
  102.    * Alias for setScriptPath 
  103.    * 
  104.    * @param string $path 
  105.    * @param string $prefix Unused 
  106.    * @return void 
  107.    */ 
  108.   public function addBasePath($path$prefix = 'Zend_View'
  109.   { 
  110.     return $this->setScriptPath($path); 
  111.   } 
  112.   /** 
  113.    * Assign a variable to the template 
  114.    * 
  115.    * @param string $key The variable name. 
  116.    * @param mixed $val The variable value. 
  117.    * @return void 
  118.    */ 
  119.   public function __set($key$val
  120.   { 
  121.     $this->_smarty->assign($key$val); 
  122.   } 
  123.   /** 
  124.    * Retrieve an assigned variable 
  125.    * 
  126.    * @param string $key The variable name. 
  127.    * @return mixed The variable value. 
  128.    */ 
  129.   public function __get($key
  130.   { 
  131.     return $this->_smarty->get_template_vars($key); 
  132.   } 
  133.   /** 
  134.    * Allows testing with empty() and isset() to work 
  135.    * 
  136.    * @param string $key 
  137.    * @return boolean 
  138.    */ 
  139.   public function __isset($key
  140.   { 
  141.      return (null !== $this->_smarty->get_template_vars($key)); 
  142.   } 
  143.   /** 
  144.    * Allows unset() on object properties to work 
  145.    * 
  146.    * @param string $key 
  147.    * @return void 
  148.    */ 
  149.   public function __unset($key
  150.   { 
  151.     $this->_smarty->clear_assign($key); 
  152.   } 
  153.   /** 
  154.    * Assign variables to the template 
  155.    * 
  156.    * Allows setting a specific key to the specified value, OR passing an array 
  157.    * of key => value pairs to set en masse. 
  158.    * 
  159.    * @see __set() 
  160.    * @param string|array $spec The assignment strategy to use (key or array of key 
  161.    * => value pairs) 
  162.    * @param mixed $value (Optional) If assigning a named variable, use this 
  163.    * as the value. 
  164.    * @return void 
  165.    */ 
  166.   public function assign($spec$value = null) 
  167.   { 
  168.     if (is_array($spec)) { 
  169.       $this->_smarty->assign($spec); 
  170.       return
  171.     } 
  172.     $this->_smarty->assign($spec$value); 
  173.   } 
  174.   /** 
  175.    * Clear all assigned variables 
  176.    * 
  177.    * Clears all variables assigned to Zend_View either via {@link assign()} or 
  178.    * property overloading ({@link __get()}/{@link __set()}). 
  179.    * 
  180.    * @return void 
  181.    */ 
  182.   public function clearVars() 
  183.   { 
  184.     $this->_smarty->clear_all_assign(); 
  185.   } 
  186.   /** 
  187.    * Processes a template and returns the output. 
  188.    * 
  189.    * @param string $name The template to process. 
  190.    * @return string The output. 
  191.    */ 
  192.   public function render($name
  193.   { 
  194.     return $this->_smarty->fetch($name); 
  195.   } 
  196.   /** 
  197.    * 设置是否生成缓存 
  198.    * 如果没有参数,默认为true 
  199.    */ 
  200.   public function setCache($bool){ 
  201.      if (isset($bool)) { 
  202.       $this->_smarty->caching = $bool
  203.       return
  204.     } 
  205.   } 

三.在app文件夹下创建cache ,compile 文件夹

四.在config.ini 配置文件中加入

dir.compile    = ../app/compile

dir.cache    = ../app/cache

三,四两步可以参见前面关于zendfreamwork框架搭建网站相关教程

五.在application.php 文件中添加

  1. /** 
  2. * 初始化smarty视图 
  3. * 
  4. */ 
  5. private function _initSmartyView() 
  6.     $view = new Zend_View_Smarty(); 
  7.     $view->setBasePath($this->_pathConfig->dir->viewBase); 
  8.     $view->setScriptPath($this->_pathConfig->dir->viewBase."/scripts"); 
  9.     $view->setCompilePath($this->_pathConfig->dir->compile); 
  10.     $view->setCachePath($this->_pathConfig->dir->cache); 
  11.     $smarty=$view->getEngine(); 
  12.     $smarty->caching=false; 
  13.     $smarty->debugging = true; 
  14.     $smarty->compile_check = true;     
  15.     $smarty->left_delimiter = "<{"//定义标示符 
  16.     $smarty->right_delimiter = "}>"
  17.     $registry = Zend_Registry::getInstance(); 
  18.     $registry->set('smartyview',$smarty); //smarty对象 
  19.     $registry->set('sview',$view);           

并在 函数 init()中加入

$this->_initSmartyView();

六.在Controller中调用

因为已经将对象注册,所以可以如下调用:

$view = Zend_Registry::getInstance()->get("smartyview");

注意这是smarty对象,使用smarty的那些语法,比如 $view->assign("user","root");

$view = Zend_Registry::getInstance()->get("sview");

这是zf的view对象,按zf中的那些方法用,不用改变。

按这样,你如果要将以前写的代码改为用smaty,后台不用变了,只需要将视图文件改变就行了

Tags: Framework Smarty

分享到: