Welcome 微信登录

首页 / 网页编程 / PHP / 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 ,文件的内容如下:
<?php/*** Zend_View_Interface*/require_once "Zend/View/Interface.php";/*** Smarty */require_once("smarty/Smarty.class.php");/*** 创建Smarty视图*/class Zend_View_Smarty implements Zend_View_Interface{/** * Smarty object * @var Smarty */protected $_smarty;/** * Constructor * * @param string $tmplPath * @param array $extraParams * @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 string $path 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");}/*** set smarty缓存* @author lengfeng*/public function setCompilePath($path){if (is_readable($path)) {$this->_smarty->compile_dir = $path;return;}throw new Exception("Invalid path provided");}/*** set smarty 编译后文档* @author lengfeng*/public function setCachePath($path){if (is_readable($path)) {$this->_smarty->cache_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 string $path * @param string $prefix Unused * @return void */public function setBasePath($path, $prefix = "Zend_View"){return $this->setScriptPath($path);}/** * Alias for setScriptPath * * @param string $path * @param string $prefix Unused * @return void */public function addBasePath($path, $prefix = "Zend_View"){return $this->setScriptPath($path);}/** * Assign a variable to the template * * @param string $key The variable name. * @param mixed $val The variable value. * @return void */public function __set($key, $val){$this->_smarty->assign($key, $val);}/** * Retrieve an assigned variable * * @param string $key 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 string $key * @return boolean */public function __isset($key){ return (null !== $this->_smarty->get_template_vars($key));}/** * Allows unset() on object properties to work * * @param string $key * @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 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){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 string $name The template to process. * @return string The output. */public function render($name){return $this->_smarty->fetch($name);}/** * 设置是否生成缓存 * 如果没有参数,默认为true */public function setCache($bool){ if (isset($bool)) {$this->_smarty->caching = $bool;return;}}}
三.在app文件夹下创建cache ,compile 文件夹
四.在config.ini 配置文件中加入
dir.compile= ../app/compiledir.cache= ../app/cache
三,四两步可以参见前面关于zendfreamwork框架搭建网站相关教程
五.在application.php 文件中添加

/*** 初始化smarty视图**/private function _initSmartyView(){$view = new Zend_View_Smarty();$view->setBasePath($this->_pathConfig->dir->viewBase);$view->setScriptPath($this->_pathConfig->dir->viewBase."/scripts");$view->setCompilePath($this->_pathConfig->dir->compile);$view->setCachePath($this->_pathConfig->dir->cache);$smarty=$view->getEngine();$smarty->caching=false;$smarty->debugging = true;$smarty->compile_check = true;$smarty->left_delimiter = "<{"; //定义标示符$smarty->right_delimiter = "}>";$registry = Zend_Registry::getInstance();$registry->set("smartyview",$smarty); //smarty对象$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,后台不用变了,只需要将视图文件改变就行了
更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。