Zend Framework框架Smarty扩展实现方法

时间:2022-08-22 19:47:28

本文实例讲述了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 ,文件的内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
<?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 配置文件中加入

?
1
2
dir.compile    = ../app/compile
dir.cache    = ../app/cache

三,四两步可以参见前面关于zendfreamwork框架搭建网站相关教程

五.在application.php 文件中添加

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 初始化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()中加入

?
1
$this->_initSmartyView();

六.在Controller中调用

因为已经将对象注册,所以可以如下调用:

?
1
2
3
4
5
$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程序设计有所帮助。