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

网络编程 2021-07-05 09:10www.168986.cn编程入门
这篇文章主要介绍了Zend Framework实现Zend_View集成Smarty模板系统的方法,详细分析了视图组件Zend_View使用接口Zend_View_Interface继承Smarty的原理与实现技巧,需要的朋友可以参考下

本文实例讲述了Zend Framework实现Zend_View集成Smarty模板系统的方法。分享给大家供大家参考,具体如下

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

Zend_View_Interface的接口定义:

<?php
/
  Interface class for Zend_View patible template engine implementations
 
  @category  Zend
  @package  Zend_View
  @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://.zend.)
  @license  http://framework.zend./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://.smarty./files/Smarty-3.1.7.tar.gz

目录结构

root@coder-671T-M://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('//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

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://.w3./TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
{$book}
{$author}
</body>
</html>

如果需要配置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('//zf_demo1/temp/smarty' . DS . 'templates' . DS)
      ->setCompileDir('//zf_demo1/temp/smarty' . DS . 'templates_c' . DS)
      ->setPluginsDir(SMARTY_PLUGINS_DIR)
      ->setCacheDir('//zf_demo1/temp/smarty' . DS . 'cache' . DS)
      ->setConfigDir('//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相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》及《》

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

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by