Zend Framework实现Zend_View集成Smarty模板系统的方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-07-13 14:26:34 浏览: 评论:0
本文实例讲述了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
- *
- * @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.xml
- 24 directories, 134 files
/zf_demo1/library/Lq/View/Smarty.php
- <?php
- require_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 = 1
- phpSettings.display_startup_errors = 1
- phpSettings.display_errors = 1
/zf_demo1/application/Bootstrap.php
- <?php
- class 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
- <?php
- class 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']);
- }
- }
Tags: Framework Zend_View Smarty
相关文章
- ·zend framework中调用kindeditor编辑器实现方法(2015-02-24)
- ·PHP开源开发框架ZendFramework使用中常见问题说明及解决方案(2021-02-11)
- ·Yii Framework框架获取分类下面的所有子类方法(2021-02-28)
- ·zend framework中使用memcache的方法(2021-07-13)
- ·Zend Framework教程之Zend_Layout布局助手详解(2021-07-13)
- ·Zend Framework教程之模型Model基本规则和使用方法(2021-07-13)
- ·Zend Framework教程之模型Model用法简单实例(2021-07-13)
- ·Zend Framework教程之视图组件Zend_View用法详解(2021-07-13)
- ·Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解(2021-07-13)
- ·Zend Framework创建自己的动作助手详解(2021-07-13)
- ·Zend Framework动作助手FlashMessenger用法详解(2021-07-13)
- ·Zend Framework动作助手Json用法实例分析(2021-07-13)
- ·Zend Framework动作助手Url用法详解(2021-07-13)
- ·Zend Framework动作助手Redirector用法实例详解(2021-07-13)
- ·Zend Framework教程之前端控制器Zend_Controller_Front用法详解(2021-07-13)
- ·Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解(2021-07-13)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)