Zend Framework框架Smarty扩展实现方法


Posted in PHP onMarch 22, 2016

本文实例讲述了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,后台不用变了,只需要将视图文件改变就行了

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP使用者状态管理功能的应用
Oct 09 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
有关php运算符的知识大全
Nov 03 PHP
基于php和mysql的简单的dao类实现crud操作功能
Jan 27 PHP
PHP伪静态Rewrite设置之APACHE篇
Jul 30 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
php生成唯一的订单函数分享
Feb 02 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
PHP反射机制原理与用法详解
Feb 15 PHP
PHP批量修改文件名称的方法分析
Feb 27 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 PHP
Zend Framework框架路由机制代码分析
Mar 22 #PHP
PHP实现补齐关闭的HTML标签
Mar 22 #PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 #PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 #PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 #PHP
Zend Framework分页类用法详解
Mar 22 #PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 #PHP
You might like
PHP中extract()函数的妙用分析
2012/07/11 PHP
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
angular2使用简单介绍
2016/03/01 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
swiper自定义分页器使用方法详解
2020/09/14 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
Python中使用item()方法遍历字典的例子
2014/08/26 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
Django URL传递参数的方法总结
2016/08/28 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
python实现AES加密和解密
2019/03/27 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
python实现根据文件格式分类
2019/10/31 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
Weblogic的布署方式
2013/08/23 面试题
实习生的自我评价
2014/01/08 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
青年志愿者活动方案
2014/08/17 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书