Zend Framework 整合 Smarty 模板视图

来源:互联网 发布:美国精神病人 知乎 编辑:程序博客网 时间:2024/04/29 06:07

有时我们只是用到 一个框架就可以了,也许这样整合就是为了某些方面的方便?

建立 PHP 文件 Smarty.php
内容如下:

代码:
<?phprequire_once('Smarty/Smarty.class.php');require_once('Zend/View/Interface.php');/*Smarty 模板兼容类Author: smartly@live.com*/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');}/*** 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);}/*** 用于兼容 smarty 的 display 方法*/public function display($resource_name, $cache_id = null, $compile_id = null) {return $this->_smarty->display($resource_name, $cache_id, $compile_id);}/*** 用于兼容 smarty 的 fetch 方法*/public function fetch($resource_name, $cache_id = null, $compile_id = null) {return $this->_smarty->fetch($resource_name, $cache_id, $compile_id);}}


使用的时候可以这样调用代码:

代码:
require_once 'Zend/View/Smarty.php';$view = new Zend_View_Smarty(null, array('template_dir' => ROOT_PATH . "/templates",'compile_dir' => ROOT_PATH . "/templates_c",'cache_dir' => ROOT_PATH . "/tmp",'left_delimiter' => "<!--{",'right_delimiter' => "}-->",));$view->assign('test', 'Hello Smarty');$view->display('index/smarty.tpl');

 代码部分转自 : http://hi.baidu.com/baijunhui/blog/item/84b25f239bba1546935807b9.html 

以上内容来自技术博客:http://hi.baidu.com/new/cuitaiwu,在此感谢!