首页 > 编程 > PHP > 正文

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

2020-03-22 17:39:29
字体:
来源:转载
供稿:网友
本文实例讲述了Zend Framework实现Zend_View集成Smarty模板系统的方法。分享给大家供大家参考,具体如下:Zend_View抽象出了Zend_View_Interface,可以让我们集成不同的视图解决方案,例如可以集成smarty。要在zend中使用其他视图系统作为视图,只要实现Zend_View_Interface接口即可。Zend_View_Interface的接口定义: * Interface html' target='_blank'>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 Licenseinterface 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.xml24 directories, 134 files/zf_demo1/library/Lq/View/Smarty.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.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.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 objectpublic 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程序设计有所帮助。PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表