程序员人生 网站导航

Zend Framework教程-Zend_View集成Smarty模板系统

栏目:ZendFramework时间:2013-12-09 00:11:06

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

Zend_View_Interface的接口定义:

<?php /** * Interface class for Zend_View compatible template engine implementations * * @category   Zend * @package    Zend_View * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License */interface Zend_View_Interface{    /**     * Return the template engine object, if any     *     * If using a third-party template engine, such as Smarty, patTemplate,     * phplib, etc, return the template engine object. Useful for calling     * methods on these objects, such as for setting filters, modifiers, etc.     *     * @return mixed     */    public function getEngine();    /**     * Set the path to find the view script used by render()     *     * @param string|array The directory (-ies) to set as the path. Note that     * the concrete view implentation may not necessarily support multiple     * directories.     * @return void     */    public function setScriptPath($path);    /**     * Retrieve all view script paths     *     * @return array     */    public function getScriptPaths();    /**     * Set a base path to all view resources     *     * @param  string $path     * @param  string $classPrefix     * @return void     */    public function setBasePath($path, $classPrefix = 'Zend_View');    /**     * Add an additional path to view resources     *     * @param  string $path     * @param  string $classPrefix     * @return void     */    public function addBasePath($path, $classPrefix = 'Zend_View');    /**     * Assign a variable to the view     *     * @param string $key The variable name.     * @param mixed $val The variable value.     * @return void     */    public function __set($key, $val);    /**     * Allows testing with empty() and isset() to work     *     * @param string $key     * @return boolean     */    public function __isset($key);    /**     * Allows unset() on object properties to work     *     * @param string $key     * @return void     */    public function __unset($key);    /**     * Assign variables to the view script via differing strategies.     *     * Suggested implementation is to allow setting a specific key to the     * specified value, OR passing an array of key => value pairs to set en     * masse.     *     * @see __set()     * @param string|array $spec The assignment strategy to use (key or array of key     * => value pairs)     * @param mixed $value (Optional) If assigning a named variable, use this     * as the value.     * @return void     */    public function assign($spec, $value = null);    /**     * Clear all assigned variables     *     * Clears all variables assigned to Zend_View either via {@link assign()} or     * property overloading ({@link __get()}/{@link __set()}).     *     * @return void     */    public function clearVars();    /**     * Processes a view script and returns the output.     *     * @param string $name The script name to process.     * @return string The script output.     */    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.├── application│   ├── Bootstrap.php│   ├── configs│   │   └── application.ini│   ├── controllers│   │   ├── ErrorController.php│   │   └── IndexController.php│   ├── models│   └── views│       ├── helpers│       └── scripts│           ├── error│           │   └── error.phtml│           └── index│               ├── index.phtml│               └── index.tpl├── docs│   └── README.txt├── library│   ├── Lq│   │   └── View│   │       └── Smarty.php│   └── smartylib│       ├── debug.tpl│       ├── plugins │       │   ├── ...........................│       │   └── variablefilter.htmlspecialchars.php│       ├── SmartyBC.class.php│       ├── Smarty.class.php│       └── sysplugins│           ├── ..........................│           └── smarty_security.php├── public│   └── index.php├── temp│   └── smarty│       └── templates_c│           └── 73d91bef3fca4e40520a7751bfdfb3e44b05bdbd.file.index.tpl.php└── tests    ├── application    │   └── controllers    │       └── IndexControllerTest.php    ├── bootstrap.php    ├── library    └── phpunit.xml24 directories, 134 files

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

<?phprequire_once 'smartylib/Smarty.class.php';class Lq_View_Smarty implements Zend_View_Interface {	/**	 * Smarty object	 * 	 * @var Smarty	 */	protected $_smarty;		/**	 * Constructor	 *	 * @param $tmplPath string       		 * @param $extraParams array       		 * @return void	 */	public function __construct($tmplPath = null, $extraParams = array()) {		$this->_smarty = new Smarty ();				if (null !== $tmplPath) {			$this->setScriptPath ( $tmplPath );		}				foreach ( $extraParams as $key => $value ) {			$this->_smarty->$key = $value;		}	}		/**	 * Return the template engine object	 *	 * @return Smarty	 */	public function getEngine() {		return $this->_smarty;	}		/**	 * Set the path to the templates	 *	 * @param $path string	 *       	 The directory to set as the path.	 * @return void	 */	public function setScriptPath($path) {		if (is_readable ( $path )) {			$this->_smarty->template_dir = $path;			return;		}				throw new Exception ( 'Invalid path provided' );	}		/**	 * Retrieve the current template directory	 *	 * @return string	 */	public function getScriptPaths() {		return array ($this->_smarty->template_dir );	}		/**	 * Alias for setScriptPath	 *	 * @param $path string       		 * @param $prefix string	 *       	 Unused	 * @return void	 */	public function setBasePath($path, $prefix = 'Zend_View') {		return $this->setScriptPath ( $path );	}		/**	 * Alias for setScriptPath	 *	 * @param $path string       		 * @param $prefix string	 *       	 Unused	 * @return void	 */	public function addBasePath($path, $prefix = 'Zend_View') {		return $this->setScriptPath ( $path );	}		/**	 * Assign a variable to the template	 *	 * @param $key string	 *       	 The variable name.	 * @param $val mixed	 *       	 The variable value.	 * @return void	 */	public function __set($key, $val) {		$this->_smarty->assign ( $key, $val );	}		/**	 * Retrieve an assigned variable	 *	 * @param $key string	 *       	 The variable name.	 * @return mixed The variable value.	 */	public function __get($key) {		return $this->_smarty->get_template_vars ( $key );	}		/**	 * Allows testing with empty() and isset() to work	 *	 * @param $key string       		 * @return boolean	 */	public function __isset($key) {		return (null !== $this->_smarty->get_template_vars ( $key ));	}		/**	 * Allows unset() on object properties to work	 *	 * @param $key string       		 * @return void	 */	public function __unset($key) {		$this->_smarty->clear_assign ( $key );	}		/**	 * Assign variables to the template	 *	 * Allows setting a specific key to the specified value, OR passing an array	 * of key => value pairs to set en masse.	 *	 * @see __set()	 * @param $spec string|array	 *       	 The assignment strategy to use (key or array of key	 *       	 => value pairs)	 * @param $value mixed	 *       	 (Optional) If assigning a named variable, use this	 *       	 as the value.	 * @return void	 */	public function assign($spec, $value = null) {		if (is_array ( $spec )) {			$this->_smarty->assign ( $spec );			return;		}				$this->_smarty->assign ( $spec, $value );	}		/**	 * Clear all assigned variables	 *	 * Clears all variables assigned to Zend_View either via {@link assign()} or	 * property overloading ({@link __get()}/{@link __set()}).	 *	 * @return void	 */	public function clearVars() {		$this->_smarty->clear_all_assign ();	}		/**	 * Processes a template and returns the output.	 *	 * @param $name string	 *       	 The template to process.	 * @return string The output.	 */	public function render($name) {		ob_start();		echo $this->_smarty->fetch ( $name );		unset($name);	}}

/zf_demo1/application/configs/application.ini

[production]includePaths.library = APPLICATION_PATH "/../library"bootstrap.path = APPLICATION_PATH "/Bootstrap.php"bootstrap.class = "Bootstrap"appnamespace = "Application"autoloadernamespaces.lq = "Lq_"pluginpaths.Lq_View_Smarty = "Lq/View/Smarty"resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"resources.frontController.params.displayExceptions = 1phpSettings.display_startup_errors = 1phpSettings.display_errors = 1
 


/zf_demo1/application/Bootstrap.php


<?phpclass Bootstrap extends Zend_Application_Bootstrap_Bootstrap {	/**	 * Initialize Smarty view	 */	protected function _initSmarty() {		$smarty = new Lq_View_Smarty ();				$smarty->setScriptPath('/www/zf_demo1/application/views/scripts');		return $smarty;	}}


/zf_demo1/application/controllers/IndexController.php

<?phpclass IndexController extends Zend_Controller_Action {		public function init() {		/*		 * Initialize action controller here		 */	}		public function indexAction() {		$this->_helper->getHelper('viewRenderer')->setNoRender();		$this->view = $this->getInvokeArg ( 'bootstrap' )->getResource ( 'smarty' );		$this->view->book = 'Hello World!  ';		$this->view->author = 'by smarty';		$this->view->render('index/index.tpl');	}}

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

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>{$book}{$author}</body></html>

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


....................................    /**     * Initialize new Smarty object     *     */    public function __construct()    {        // selfpointer needed by some other class methods        $this->smarty = $this;        if (is_callable('mb_internal_encoding')) {            mb_internal_encoding(Smarty::$_CHARSET);        }        $this->start_time = microtime(true);        // set default dirs        $this->setTemplateDir('/www/zf_demo1/temp/smarty' . DS . 'templates' . DS)            ->setCompileDir('/www/zf_demo1/temp/smarty' . DS . 'templates_c' . DS)            ->setPluginsDir(SMARTY_PLUGINS_DIR)            ->setCacheDir('/www/zf_demo1/temp/smarty' . DS . 'cache' . DS)            ->setConfigDir('/www/zf_demo1/temp/smarty' . DS . 'configs' . DS);        $this->debug_tpl = 'file:' . dirname(__FILE__) . '/debug.tpl';        if (isset($_SERVER['SCRIPT_NAME'])) {            $this->assignGlobal('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']);        }    }......................




------分隔线----------------------------
------分隔线----------------------------

最新技术推荐