• 技术文章 >后端开发 >php教程

    Zend Framework实现Zend_View集成Smarty模板系统的方法_PHP

    2016-05-27 10:35:48原创330
    本文实例讲述了Zend Framework实现Zend_View集成Smarty模板系统的方法。分享给大家供大家参考,具体如下:

    Zend_View抽象出了Zend_View_Interface,可以让我们集成不同的视图解决方案,例如可以集成smarty。要在zend中使用其他视图系统作为视图,只要实现Zend_View_Interface接口即可。

    Zend_View_Interface的接口定义:

    <?php
    /**
     * Interface class for Zend_View compatible template engine implementations
     *
     * @category  Zend
     * @package  Zend_View
     * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
     * @license  http://framework.zend.com/license/new-bsd   New BSD License
     */
    interface Zend_View_Interface
    {
      /**
       * Return the template engine object, if any
       *
       * If using a third-party template engine, such as Smarty, patTemplate,
       * phplib, etc, return the template engine object. Useful for calling
       * methods on these objects, such as for setting filters, modifiers, etc.
       *
       * @return mixed
       */
      public function getEngine();
      /**
       * Set the path to find the view script used by render()
       *
       * @param string|array The directory (-ies) to set as the path. Note that
       * the concrete view implentation may not necessarily support multiple
       * directories.
       * @return void
       */
      public function setScriptPath($path);
      /**
       * Retrieve all view script paths
       *
       * @return array
       */
      public function getScriptPaths();
      /**
       * Set a base path to all view resources
       *
       * @param string $path
       * @param string $classPrefix
       * @return void
       */
      public function setBasePath($path, $classPrefix = 'Zend_View');
      /**
       * Add an additional path to view resources
       *
       * @param string $path
       * @param string $classPrefix
       * @return void
       */
      public function addBasePath($path, $classPrefix = 'Zend_View');
      /**
       * Assign a variable to the view
       *
       * @param string $key The variable name.
       * @param mixed $val The variable value.
       * @return void
       */
      public function __set($key, $val);
      /**
       * Allows testing with empty() and isset() to work
       *
       * @param string $key
       * @return boolean
       */
      public function __isset($key);
      /**
       * Allows unset() on object properties to work
       *
       * @param string $key
       * @return void
       */
      public function __unset($key);
      /**
       * Assign variables to the view script via differing strategies.
       *
       * Suggested implementation is to allow 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);
      /**
       * 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();
      /**
       * Processes a view script and returns the output.
       *
       * @param string $name The script name to process.
       * @return string The script output.
       */
      public function render($name);
    }
    
    

    集成Smarty的基本实现如下:

    smarty下载地址

    http://www.smarty.net/files/Smarty-3.1.7.tar.gz

    目录结构

    root@coder-671T-M:/www/zf_demo1# tree
    .
    ├── application
    │ ├── Bootstrap.php
    │ ├── configs
    │ │ └── application.ini
    │ ├── controllers
    │ │ ├── ErrorController.php
    │ │ └── IndexController.php
    │ ├── models
    │ └── views
    │ ├── helpers
    │ └── scripts
    │ ├── error
    │ │ └── error.phtml
    │ └── index
    │ ├── index.phtml
    │ └── index.tpl
    ├── docs
    │ └── README.txt
    ├── library
    │ ├── Lq
    │ │ └── View
    │ │ └── Smarty.php
    │ └── smartylib
    │ ├── debug.tpl
    │ ├── plugins
    │ │ ├── ...........................
    │ │ └── variablefilter.htmlspecialchars.php
    │ ├── SmartyBC.class.php
    │ ├── Smarty.class.php
    │ └── sysplugins
    │ ├── ..........................
    │ └── smarty_security.php
    ├── public
    │ └── index.php
    ├── temp
    │ └── smarty
    │ └── templates_c
    │ └── 73d91bef3fca4e40520a7751bfdfb3e44b05bdbd.file.index.tpl.php
    └── tests
    ├── application
    │ └── controllers
    │ └── IndexControllerTest.php
    ├── bootstrap.php
    ├── library
    └── phpunit.xml

    24 directories, 134 files

    /zf_demo1/library/Lq/View/Smarty.php

    <?php
    require_once 'smartylib/Smarty.class.php';
    class Lq_View_Smarty implements Zend_View_Interface {
      /**
       * Smarty object
       *
       * @var Smarty
       */
      protected $_smarty;
      /**
       * Constructor
       *
       * @param $tmplPath string
       * @param $extraParams array
       * @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 $path string
       *      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' );
      }
      /**
       * Retrieve the current template directory
       *
       * @return string
       */
      public function getScriptPaths() {
        return array ($this->_smarty->template_dir );
      }
      /**
       * Alias for setScriptPath
       *
       * @param $path string
       * @param $prefix string
       *      Unused
       * @return void
       */
      public function setBasePath($path, $prefix = 'Zend_View') {
        return $this->setScriptPath ( $path );
      }
      /**
       * Alias for setScriptPath
       *
       * @param $path string
       * @param $prefix string
       *      Unused
       * @return void
       */
      public function addBasePath($path, $prefix = 'Zend_View') {
        return $this->setScriptPath ( $path );
      }
      /**
       * Assign a variable to the template
       *
       * @param $key string
       *      The variable name.
       * @param $val mixed
       *      The variable value.
       * @return void
       */
      public function __set($key, $val) {
        $this->_smarty->assign ( $key, $val );
      }
      /**
       * Retrieve an assigned variable
       *
       * @param $key string
       *      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 $key string
       * @return boolean
       */
      public function __isset($key) {
        return (null !== $this->_smarty->get_template_vars ( $key ));
      }
      /**
       * Allows unset() on object properties to work
       *
       * @param $key string
       * @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 $spec string|array
       *      The assignment strategy to use (key or array of key
       *      => value pairs)
       * @param $value mixed
       *      (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 $name string
       *      The template to process.
       * @return string The output.
       */
      public function render($name) {
        ob_start();
        echo $this->_smarty->fetch ( $name );
        unset($name);
      }
    }
    
    

    /zf_demo1/application/configs/application.ini

    [production]
    includePaths.library = APPLICATION_PATH "/../library"
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
    appnamespace = "Application"
    autoloadernamespaces.lq = "Lq_"
    pluginpaths.Lq_View_Smarty = "Lq/View/Smarty"
    resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
    resources.frontController.params.displayExceptions = 1
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    
    

    /zf_demo1/application/Bootstrap.php

    <?php
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
      /**
       * Initialize Smarty view
       */
      protected function _initSmarty() {
        $smarty = new Lq_View_Smarty ();
        $smarty->setScriptPath('/www/zf_demo1/application/views/scripts');
        return $smarty;
      }
    }
    
    

    /zf_demo1/application/controllers/IndexController.php

    <?php
    class IndexController extends Zend_Controller_Action {
      public function init() {
        /*
         * Initialize action controller here
         */
      }
      public function indexAction() {
        $this->_helper->getHelper('viewRenderer')->setNoRender();
        $this->view = $this->getInvokeArg ( 'bootstrap' )->getResource ( 'smarty' );
        $this->view->book = 'Hello World! ';
        $this->view->author = 'by smarty';
        $this->view->render('index/index.tpl');
      }
    }
    
    

    /zf_demo1/application/views/scripts/index/index.tpl

    
    
    
    
    Insert title here
    
    
    {$book} {$author}

    如果需要配置smarty可以打开/zf_demo1/library/smartylib/Smarty.class.php文件进行相应配置例如

    /**
    * Initialize new Smarty object
    *
    */
    public function __construct()
    {
        // selfpointer needed by some other class methods
        $this->smarty = $this;
        if (is_callable('mb_internal_encoding')) {
          mb_internal_encoding(Smarty::$_CHARSET);
        }
        $this->start_time = microtime(true);
        // set default dirs
        $this->setTemplateDir('/www/zf_demo1/temp/smarty' . DS . 'templates' . DS)
          ->setCompileDir('/www/zf_demo1/temp/smarty' . DS . 'templates_c' . DS)
          ->setPluginsDir(SMARTY_PLUGINS_DIR)
          ->setCacheDir('/www/zf_demo1/temp/smarty' . DS . 'cache' . DS)
          ->setConfigDir('/www/zf_demo1/temp/smarty' . DS . 'configs' . DS);
        $this->debug_tpl = 'file:' . dirname(__FILE__) . '/debug.tpl';
        if (isset($_SERVER['SCRIPT_NAME'])) {
          $this->assignGlobal('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']);
        }
    }
    
    

    更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Zend Framework Zend_View Smart
    上一篇:CodeIgniter表单验证方法实例详解_PHP 下一篇:CodeIgniter针对数据库的连接、配置及使用方法_PHP
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 【吐血整理】40+个PHP面试题附答案(实战经验)• php实现读取手机客户端浏览器的类,php客户端_PHP教程• PHP之autoload运行机制实例分析,autoload实例分析_PHP教程• PHP 使用pcntl和libevent 实现Timer功能_PHP教程• PHP跳转函数和一个通用的操作提示类的编写_PHP教程
    1/1

    PHP中文网