本文實例講述了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程序設計有所幫助。