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_Flame(Version:Progress)的原代码
Oct 09 PHP
Apache2 httpd.conf 中文版
Dec 06 PHP
Php Cookie的一个使用注意点
Nov 08 PHP
php记录日志的实现代码
Aug 08 PHP
PHP 文件系统详解
Sep 13 PHP
PHPEXCEL 使用小记
Jan 06 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
8个必备的PHP功能开发
Oct 02 PHP
php的socket编程详解
Nov 20 PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 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 文件缓存的性能测试
2010/04/25 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
js 字符串操作函数
2009/07/25 Javascript
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
2016/05/13 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Django添加feeds功能的示例
2018/08/07 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
Python restful框架接口开发实现
2020/04/13 Python
python属于解释型语言么
2020/06/15 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
AJax面试题
2014/11/25 面试题
电台编导求职信
2014/05/06 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
java实现面板之间切换功能
2022/06/10 Java/Android