Zend Framework框架Smarty扩展实现方法

5年以前  |  阅读数:888 次  |  编程语言:PHP 

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

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

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例