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 相关文章推荐
打造计数器DIY三步曲(上)
Oct 09 PHP
粗略计算在线时间,bug:ip相同
Dec 09 PHP
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
用php解析html的实现代码
Aug 08 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
用来解析.htpasswd文件的PHP类
Sep 05 PHP
优化PHP代码技巧的小结
Jun 02 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
实例讲解PHP页面静态化
Feb 05 PHP
yii框架数据库关联查询操作示例
Oct 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
使用 MySQL Date/Time 类型
2008/03/26 PHP
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
解析php入库和出库
2013/06/25 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
Javascript浅谈之this
2013/12/17 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
python发送HTTP请求的方法小结
2015/07/08 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
自动一体化专业求职信
2014/03/15 职场文书
面试必备的求职信
2014/05/25 职场文书
建筑工地大门标语
2014/06/18 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
三年级学生期末评语
2014/12/26 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python