php教程

超轻量级php框架startmvc

Zend Framework框架Smarty扩展实现方法

更新时间:2020-03-08 10:36 作者:startmvc
本文实例讲述了ZendFramework框架Smarty扩展实现方法。分享给大家供大家参考,具体如下:今

本文实例讲述了Zend Framework框架Smarty扩展实现方法。分享给大家供大家参考,具体如下:

今天总结一下ZF框架中扩展Smarty模板的方法,在ZF帮助文档中已经有比较详细的介绍,在这我稍微多说一些。

一.将smarty的核心文件包放在lib文件夹下,文件包中要包括(internals/,plugins/,Config_File.class.php,Smarty.class.php,Smarty_Compiler.class.php,debug.tpl).

二.在Zend/View下添加文件:Smarty.php ,文件的内容如下:


<?php
/**
* Zend_View_Interface
*/
require_once 'Zend/View/Interface.php';
/**
* Smarty 
*/
require_once("smarty/Smarty.class.php");
/**
* 创建Smarty视图
*/
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');
 }
 /**
 * set smarty缓存
 * @author lengfeng
 */
 public function setCompilePath($path){
 if (is_readable($path)) {
 $this->_smarty->compile_dir = $path;
 return;
 }
 throw new Exception('Invalid path provided'); 
 }
 /**
 * set smarty 编译后文档
 * @author lengfeng
 */
 public function setCachePath($path){
 if (is_readable($path)) {
 $this->_smarty->cache_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);
 }
 /**
 * 设置是否生成缓存
 * 如果没有参数,默认为true
 */
 public function setCache($bool){
 if (isset($bool)) {
 $this->_smarty->caching = $bool;
 return;
 }
 }
}

三.在app文件夹下创建cache ,compile 文件夹

四.在config.ini 配置文件中加入


dir.compile = ../app/compile
dir.cache = ../app/cache

三,四两步可以参见前面关于zendfreamwork框架搭建网站相关教程

五.在application.php 文件中添加


/**
* 初始化smarty视图
*
*/
private function _initSmartyView()
{
 $view = new Zend_View_Smarty();
 $view->setBasePath($this->_pathConfig->dir->viewBase);
 $view->setScriptPath($this->_pathConfig->dir->viewBase."/scripts");
 $view->setCompilePath($this->_pathConfig->dir->compile);
 $view->setCachePath($this->_pathConfig->dir->cache);
 $smarty=$view->getEngine();
 $smarty->caching=false;
 $smarty->debugging = true;
 $smarty->compile_check = true; 
 $smarty->left_delimiter = "<{"; //定义标示符
 $smarty->right_delimiter = "}>";
 $registry = Zend_Registry::getInstance();
 $registry->set('smartyview',$smarty); //smarty对象
 $registry->set('sview',$view); 
}

并在 函数 init()中加入


$this->_initSmartyView();

六.在Controller中调用

因为已经将对象注册,所以可以如下调用:


$view = Zend_Registry::getInstance()->get("smartyview");
//注意这是smarty对象,使用smarty的那些语法,比如 $view->assign("user","root");
$view = Zend_Registry::getInstance()->get("sview"); 
//这是zf的view对象,按zf中的那些方法用,不用改变。
//按这样,你如果要将以前写的代码改为用smaty,后台不用变了,只需要将视图文件改变就行了