微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

Zend_View_Interface的接口定义:

rush:PHP;"> 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的基本实现如下:

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.xml

24 directories,134 files

/zf_demo1/library/Lq/View/Smarty.PHP

rush:PHP;"> _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

rush:bash;"> [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 = 1 PHPSettings.display_startup_errors = 1 PHPSettings.display_errors = 1

/zf_demo1/application/Bootstrap.PHP

rush:PHP;"> setScriptPath('/www/zf_demo1/application/views/scripts'); return $smarty; } }

/zf_demo1/application/controllers/IndexController.PHP

rush:PHP;"> _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

rush:PHP;"> <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> Insert title here {$book} {$author}

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

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']); } }

更多关于zend相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《PHP常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐