本文实例讲述了Zend Framework实现Zend_View集成Smarty模板系统的方法。分享给大家供大家参考,具体如下:
Zend_View抽象出了Zend_View_Interface,可以让我们集成不同的视图解决方案,例如可以集成smarty。要在zend中使用其他视图系统作为视图,只要实现Zend_View_Interface接口即可。
Zend_View_Interface的接口定义:
<?php/** * Interface class for Zend_View compatible template engine implementations * * @categoryZend * @packageZend_View * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @licensehttp://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.xml
24 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"]);}}更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。