当前位置:首页 > CMS教程 > 其它CMS > 列表

Zend Framework实现Zend_View集成Smarty模板系统的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-13 14:26:34 浏览: 评论:0 

本文实例讲述了Zend Framework实现Zend_View集成Smarty模板系统的方法,分享给大家供大家参考,具体如下:

Zend_View抽象出了Zend_View_Interface,可以让我们集成不同的视图解决方案,例如可以集成smarty。要在zend中使用其他视图系统作为视图,只要实现Zend_View_Interface接口即可。

Zend_View_Interface的接口定义:

  1. <?php 
  2. /** 
  3.  * Interface class for Zend_View compatible template engine implementations 
  4.  * 
  5.  * @category  Zend 
  6.  * @package  Zend_View 
  7.  * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) 
  8.  * @license  http://framework.zend.com/license/new-bsd   New BSD License 
  9.  */ 
  10. interface Zend_View_Interface 
  11.   /** 
  12.    * Return the template engine object, if any 
  13.    * 
  14.    * If using a third-party template engine, such as Smarty, patTemplate, 
  15.    * phplib, etc, return the template engine object. Useful for calling 
  16.    * methods on these objects, such as for setting filters, modifiers, etc. 
  17.    * 
  18.    * @return mixed 
  19.    */ 
  20.   public function getEngine(); 
  21.   /** 
  22.    * Set the path to find the view script used by render() 
  23.    * 
  24.    * @param string|array The directory (-ies) to set as the path. Note that 
  25.    * the concrete view implentation may not necessarily support multiple 
  26.    * directories. 
  27.    * @return void 
  28.    */ 
  29.   public function setScriptPath($path); 
  30.   /** 
  31.    * Retrieve all view script paths 
  32.    * 
  33.    * @return array 
  34.    */ 
  35.   public function getScriptPaths(); 
  36.   /** 
  37.    * Set a base path to all view resources 
  38.    * 
  39.    * @param string $path 
  40.    * @param string $classPrefix 
  41.    * @return void 
  42.    */ 
  43.   public function setBasePath($path$classPrefix = 'Zend_View'); 
  44.   /** 
  45.    * Add an additional path to view resources 
  46.    * 
  47.    * @param string $path 
  48.    * @param string $classPrefix 
  49.    * @return void 
  50.    */ 
  51.   public function addBasePath($path$classPrefix = 'Zend_View'); 
  52.   /** 
  53.    * Assign a variable to the view 
  54.    * 
  55.    * @param string $key The variable name. 
  56.    * @param mixed $val The variable value. 
  57.    * @return void 
  58.    */ 
  59.   public function __set($key$val); 
  60.   /** 
  61.    * Allows testing with empty() and isset() to work 
  62.    * 
  63.    * @param string $key 
  64.    * @return boolean 
  65.    */ 
  66.   public function __isset($key); 
  67.   /** 
  68.    * Allows unset() on object properties to work 
  69.    * 
  70.    * @param string $key 
  71.    * @return void 
  72.    */ 
  73.   public function __unset($key); 
  74.   /** 
  75.    * Assign variables to the view script via differing strategies. 
  76.    * 
  77.    * Suggested implementation is to allow setting a specific key to the 
  78.    * specified value, OR passing an array of key => value pairs to set en 
  79.    * masse. 
  80.    * 
  81.    * @see __set() 
  82.    * @param string|array $spec The assignment strategy to use (key or array of key 
  83.    * => value pairs) 
  84.    * @param mixed $value (Optional) If assigning a named variable, use this 
  85.    * as the value. 
  86.    * @return void 
  87.    */ 
  88.   public function assign($spec$value = null); 
  89.   /** 
  90.    * Clear all assigned variables 
  91.    * 
  92.    * Clears all variables assigned to Zend_View either via {@link assign()} or 
  93.    * property overloading ({@link __get()}/{@link __set()}). 
  94.    * 
  95.    * @return void 
  96.    */ 
  97.   public function clearVars(); 
  98.   /** 
  99.    * Processes a view script and returns the output. 
  100.    * 
  101.    * @param string $name The script name to process. 
  102.    * @return string The script output. 
  103.    */ 
  104.   public function render($name); 

集成Smarty的基本实现如下:

smarty下载地址

http://www.smarty.net/files/Smarty-3.1.7.tar.gz

目录结构

root@coder-671T-M:/www/zf_demo1# tree

  1. ├── application 
  2. │   ├── Bootstrap.php 
  3. │   ├── configs 
  4. │   │   └── application.ini 
  5. │   ├── controllers 
  6. │   │   ├── ErrorController.php 
  7. │   │   └── IndexController.php 
  8. │   ├── models 
  9. │   └── views 
  10. │       ├── helpers 
  11. │       └── scripts 
  12. │           ├── error 
  13. │           │   └── error.phtml 
  14. │           └── index 
  15. │               ├── index.phtml 
  16. │               └── index.tpl 
  17. ├── docs 
  18. │   └── README.txt 
  19. ├── library 
  20. │   ├── Lq 
  21. │   │   └── View 
  22. │   │       └── Smarty.php 
  23. │   └── smartylib 
  24. │       ├── debug.tpl 
  25. │       ├── plugins 
  26. │       │   ├── ........................... 
  27. │       │   └── variablefilter.htmlspecialchars.php 
  28. │       ├── SmartyBC.class.php 
  29. │       ├── Smarty.class.php 
  30. │       └── sysplugins 
  31. │           ├── .......................... 
  32. │           └── smarty_security.php 
  33. ├── public 
  34. │   └── index.php 
  35. ├── temp 
  36. │   └── smarty 
  37. │       └── templates_c 
  38. │           └── 73d91bef3fca4e40520a7751bfdfb3e44b05bdbd.file.index.tpl.php 
  39. └── tests 
  40.     ├── application 
  41.     │   └── controllers 
  42.     │       └── IndexControllerTest.php 
  43.     ├── bootstrap.php 
  44.     ├── library 
  45.     └── phpunit.xml 
  46.  
  47. 24 directories, 134 files 

/zf_demo1/library/Lq/View/Smarty.php

  1. <?php 
  2. require_once 'smartylib/Smarty.class.php'
  3. class Lq_View_Smarty implements Zend_View_Interface { 
  4.   /** 
  5.    * Smarty object 
  6.    * 
  7.    * @var Smarty 
  8.    */ 
  9.   protected $_smarty
  10.   /** 
  11.    * Constructor 
  12.    * 
  13.    * @param $tmplPath string 
  14.    * @param $extraParams array 
  15.    * @return void 
  16.    */ 
  17.   public function __construct($tmplPath = null, $extraParams = array()) { 
  18.     $this->_smarty = new Smarty (); 
  19.     if (null !== $tmplPath) { 
  20.       $this->setScriptPath ( $tmplPath ); 
  21.     } 
  22.     foreach ( $extraParams as $key => $value ) { 
  23.       $this->_smarty->$key = $value
  24.     } 
  25.   } 
  26.   /** 
  27.    * Return the template engine object 
  28.    * 
  29.    * @return Smarty 
  30.    */ 
  31.   public function getEngine() { 
  32.     return $this->_smarty; 
  33.   } 
  34.   /** 
  35.    * Set the path to the templates 
  36.    * 
  37.    * @param $path string 
  38.    *      The directory to set as the path. 
  39.    * @return void 
  40.    */ 
  41.   public function setScriptPath($path) { 
  42.     if (is_readable ( $path )) { 
  43.       $this->_smarty->template_dir = $path
  44.       return
  45.     } 
  46.     throw new Exception ( 'Invalid path provided' ); 
  47.   } 
  48.   /** 
  49.    * Retrieve the current template directory 
  50.    * 
  51.    * @return string 
  52.    */ 
  53.   public function getScriptPaths() { 
  54.     return array ($this->_smarty->template_dir ); 
  55.   } 
  56.   /** 
  57.    * Alias for setScriptPath 
  58.    * 
  59.    * @param $path string 
  60.    * @param $prefix string 
  61.    *      Unused 
  62.    * @return void 
  63.    */ 
  64.   public function setBasePath($path$prefix = 'Zend_View') { 
  65.     return $this->setScriptPath ( $path ); 
  66.   } 
  67.   /** 
  68.    * Alias for setScriptPath 
  69.    * 
  70.    * @param $path string 
  71.    * @param $prefix string 
  72.    *      Unused 
  73.    * @return void 
  74.    */ 
  75.   public function addBasePath($path$prefix = 'Zend_View') { 
  76.     return $this->setScriptPath ( $path ); 
  77.   } 
  78.   /** 
  79.    * Assign a variable to the template 
  80.    * 
  81.    * @param $key string 
  82.    *      The variable name. 
  83.    * @param $val mixed 
  84.    *      The variable value. 
  85.    * @return void 
  86.    */ 
  87.   public function __set($key$val) { 
  88.     $this->_smarty->assign ( $key$val ); 
  89.   } 
  90.   /** 
  91.    * Retrieve an assigned variable 
  92.    * 
  93.    * @param $key string 
  94.    *      The variable name. 
  95.    * @return mixed The variable value. 
  96.    */ 
  97.   public function __get($key) { 
  98.     return $this->_smarty->get_template_vars ( $key ); 
  99.   } 
  100.   /** 
  101.    * Allows testing with empty() and isset() to work 
  102.    * 
  103.    * @param $key string 
  104.    * @return boolean 
  105.    */ 
  106.   public function __isset($key) { 
  107.     return (null !== $this->_smarty->get_template_vars ( $key )); 
  108.   } 
  109.   /** 
  110.    * Allows unset() on object properties to work 
  111.    * 
  112.    * @param $key string 
  113.    * @return void 
  114.    */ 
  115.   public function __unset($key) { 
  116.     $this->_smarty->clear_assign ( $key ); 
  117.   } 
  118.   /** 
  119.    * Assign variables to the template 
  120.    * 
  121.    * Allows setting a specific key to the specified value, OR passing an array 
  122.    * of key => value pairs to set en masse. 
  123.    * 
  124.    * @see __set() 
  125.    * @param $spec string|array 
  126.    *      The assignment strategy to use (key or array of key 
  127.    *      => value pairs) 
  128.    * @param $value mixed 
  129.    *      (Optional) If assigning a named variable, use this 
  130.    *      as the value. 
  131.    * @return void 
  132.    */ 
  133.   public function assign($spec$value = null) { 
  134.     if (is_array ( $spec )) { 
  135.       $this->_smarty->assign ( $spec ); 
  136.       return
  137.     } 
  138.     $this->_smarty->assign ( $spec$value ); 
  139.   } 
  140.   /** 
  141.    * Clear all assigned variables 
  142.    * 
  143.    * Clears all variables assigned to Zend_View either via {@link assign()} or 
  144.    * property overloading ({@link __get()}/{@link __set()}). 
  145.    * 
  146.    * @return void 
  147.    */ 
  148.   public function clearVars() { 
  149.     $this->_smarty->clear_all_assign (); 
  150.   } 
  151.   /** 
  152.    * Processes a template and returns the output. 
  153.    * 
  154.    * @param $name string 
  155.    *      The template to process. 
  156.    * @return string The output. 
  157.    */ 
  158.   public function render($name) { 
  159.     ob_start(); 
  160.     echo $this->_smarty->fetch ( $name ); 
  161.     unset($name); 
  162.   } 

/zf_demo1/application/configs/application.ini

  1. [production] 
  2. includePaths.library = APPLICATION_PATH "/../library" 
  3. bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
  4. bootstrap.class = "Bootstrap" 
  5. appnamespace = "Application" 
  6. autoloadernamespaces.lq = "Lq_" 
  7. pluginpaths.Lq_View_Smarty = "Lq/View/Smarty" 
  8. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
  9. resources.frontController.params.displayExceptions = 1 
  10. phpSettings.display_startup_errors = 1 
  11. phpSettings.display_errors = 1 

/zf_demo1/application/Bootstrap.php

  1. <?php 
  2. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { 
  3.   /** 
  4.    * Initialize Smarty view 
  5.    */ 
  6.   protected function _initSmarty() { 
  7.     $smarty = new Lq_View_Smarty (); 
  8.     $smarty->setScriptPath('/www/zf_demo1/application/views/scripts'); 
  9.     return $smarty
  10.   } 

/zf_demo1/application/controllers/IndexController.php

  1. <?php 
  2. class IndexController extends Zend_Controller_Action { 
  3.   public function init() { 
  4.     /* 
  5.      * Initialize action controller here 
  6.      */ 
  7.   } 
  8.   public function indexAction() { 
  9.     $this->_helper->getHelper('viewRenderer')->setNoRender(); 
  10.     $this->view = $this->getInvokeArg ( 'bootstrap' )->getResource ( 'smarty' ); 
  11.     $this->view->book = 'Hello World! '
  12.     $this->view->author = 'by smarty'
  13.     $this->view->render('index/index.tpl'); 
  14.   } 

/zf_demo1/application/views/scripts/index/index.tpl

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
  2. "http://www.w3.org/TR/html4/loose.dtd"
  3. <html> 
  4. <head> 
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
  6. <title>Insert title here</title> 
  7. </head> 
  8. <body> 
  9. {$book
  10. {$author
  11. </body> 
  12. </html> 

如果需要配置smarty可以打开/zf_demo1/library/smartylib/Smarty.class.php文件进行相应配置例如。

  1. /** 
  2. * Initialize new Smarty object 
  3. * 
  4. */ 
  5. public function __construct() 
  6.     // selfpointer needed by some other class methods 
  7.     $this->smarty = $this
  8.     if (is_callable('mb_internal_encoding')) { 
  9.       mb_internal_encoding(Smarty::$_CHARSET); 
  10.     } 
  11.     $this->start_time = microtime(true); 
  12.     // set default dirs 
  13.     $this->setTemplateDir('/www/zf_demo1/temp/smarty' . DS . 'templates' . DS) 
  14.       ->setCompileDir('/www/zf_demo1/temp/smarty' . DS . 'templates_c' . DS) 
  15.       ->setPluginsDir(SMARTY_PLUGINS_DIR) 
  16.       ->setCacheDir('/www/zf_demo1/temp/smarty' . DS . 'cache' . DS) 
  17.       ->setConfigDir('/www/zf_demo1/temp/smarty' . DS . 'configs' . DS); 
  18.     $this->debug_tpl = 'file:' . dirname(__FILE__) . '/debug.tpl'
  19.     if (isset($_SERVER['SCRIPT_NAME'])) { 
  20.       $this->assignGlobal('SCRIPT_NAME'$_SERVER['SCRIPT_NAME']); 
  21.     } 
  22. }

Tags: Framework Zend_View Smarty

分享到: