|
1
|
|
|
<?php |
|
2
|
|
|
require_once(dirname(__FILE__) . '/fwolflib.php'); |
|
3
|
|
|
require_once(FWOLFLIB . 'class/cache/cache.php'); |
|
4
|
|
|
require_once(FWOLFLIB . 'class/form.php'); |
|
5
|
|
|
require_once(FWOLFLIB . 'class/list-table.php'); |
|
6
|
|
|
require_once(FWOLFLIB . 'class/validator.php'); |
|
7
|
|
|
require_once(FWOLFLIB . 'class/ajax/ajax-sel-div.php'); |
|
8
|
|
|
require_once(FWOLFLIB . 'func/string.php'); |
|
9
|
|
|
require_once(FWOLFLIB . 'func/request.php'); |
|
10
|
|
|
|
|
11
|
|
|
|
|
12
|
|
|
/** |
|
13
|
|
|
* View in MVC |
|
14
|
|
|
* |
|
15
|
|
|
* View是在Controler和Module之间起到一个融合的作用,它从Controler接受命令, |
|
16
|
|
|
* 从Module中接受数据,然后使用适当的模板和顺序来生成最终的html代码, |
|
17
|
|
|
* 然后交给Controler输出。 |
|
18
|
|
|
* |
|
19
|
|
|
* View主要体现为各项功能的page.php页面,相似的功能可以放在一个文件中进行处理, |
|
20
|
|
|
* 方便一些Module调用的共享。 |
|
21
|
|
|
* |
|
22
|
|
|
* View从Module得到结果数据后,使用Smarty模板进行加工,生成html,再交给Controler输出。 |
|
23
|
|
|
* |
|
24
|
|
|
* Action的处理主要在View中,Action的默认值也在View中赋予和实现。 |
|
25
|
|
|
* |
|
26
|
|
|
* |
|
27
|
|
|
* Output generate sequence: |
|
28
|
|
|
* GetOutput() |
|
29
|
|
|
* GenHeader() |
|
30
|
|
|
* GenMenu() |
|
31
|
|
|
* GenContent() |
|
32
|
|
|
* Will auto call GenXxx() or GenContentXxx() is exists. |
|
33
|
|
|
* GenFooter() |
|
34
|
|
|
* |
|
35
|
|
|
* |
|
36
|
|
|
* If need to re-generate some part, you can directly call GenFooter() etc. |
|
37
|
|
|
* |
|
38
|
|
|
* Apply 'cache=0' at end of url will force cache update, |
|
39
|
|
|
* notice there is no cache stored for url plused 'cache=0'. |
|
40
|
|
|
* |
|
41
|
|
|
* |
|
42
|
|
|
* Roadmap: |
|
43
|
|
|
* |
|
44
|
|
|
* 2012-11-16 1.2 488a3fbf41 |
|
45
|
|
|
* Using new Cache class, cache as inner object var now. |
|
46
|
|
|
* 2010-06-21 1.1 c10b557466 |
|
47
|
|
|
* Rename GenContentXxx() to GenXxx(), with backward compative. |
|
48
|
|
|
* 2010-05-21 1.0 60d16e2417 |
|
49
|
|
|
* Basic feature. |
|
50
|
|
|
* |
|
51
|
|
|
* |
|
52
|
|
|
* @deprecated Use Fwlib\Mvc\AbstractView |
|
53
|
|
|
* @package fwolflib |
|
54
|
|
|
* @subpackage class.mvc |
|
55
|
|
|
* @copyright Copyright 2008-2012, Fwolf |
|
56
|
|
|
* @author Fwolf <[email protected]> |
|
57
|
|
|
* @since 2008-04-06 |
|
58
|
|
|
* @see Controler |
|
59
|
|
|
* @see Module |
|
60
|
|
|
*/ |
|
61
|
|
|
abstract class View extends Fwolflib { |
|
|
|
|
|
|
62
|
|
|
|
|
63
|
|
|
/** |
|
64
|
|
|
* Action parameter, the view command to determin what to display |
|
65
|
|
|
* @var string // $_GET['a'], means which action user prefered of the module |
|
66
|
|
|
*/ |
|
67
|
|
|
protected $sAction = null; |
|
68
|
|
|
|
|
69
|
|
|
/** |
|
70
|
|
|
* Ajax select div object |
|
71
|
|
|
* @var object |
|
72
|
|
|
*/ |
|
73
|
|
|
public $oAjaxSelDiv = null; |
|
74
|
|
|
|
|
75
|
|
|
/** |
|
76
|
|
|
* Cache object |
|
77
|
|
|
* @var object |
|
78
|
|
|
*/ |
|
79
|
|
|
public $oCache = NULL; |
|
80
|
|
|
|
|
81
|
|
|
/** |
|
82
|
|
|
* If cache turned on |
|
83
|
|
|
* Remember to set cache config before turned it on. |
|
84
|
|
|
* @var boolean |
|
85
|
|
|
*/ |
|
86
|
|
|
public $bCacheOn = false; |
|
87
|
|
|
|
|
88
|
|
|
/** |
|
89
|
|
|
* Css file url used in header |
|
90
|
|
|
* eg: array(array(0 => 'default.css', 1 => 'screen, print'), ...) |
|
91
|
|
|
* @var array of array |
|
92
|
|
|
*/ |
|
93
|
|
|
public $aCss = array(); |
|
94
|
|
|
|
|
95
|
|
|
/** |
|
96
|
|
|
* View's caller -- Controler object |
|
97
|
|
|
* @var object |
|
98
|
|
|
*/ |
|
99
|
|
|
public $oCtl = null; |
|
100
|
|
|
|
|
101
|
|
|
/** |
|
102
|
|
|
* Form object, auto new when first used. |
|
103
|
|
|
* @var object |
|
104
|
|
|
*/ |
|
105
|
|
|
public $oForm = null; |
|
106
|
|
|
|
|
107
|
|
|
/** |
|
108
|
|
|
* Js file url used in header |
|
109
|
|
|
* eg: 'common.js', ..., Can index by string. |
|
110
|
|
|
* @var array of string |
|
111
|
|
|
*/ |
|
112
|
|
|
public $aJs = array(); |
|
113
|
|
|
|
|
114
|
|
|
/** |
|
115
|
|
|
* ListTable object, auto new when first used. |
|
116
|
|
|
* @var object |
|
117
|
|
|
*/ |
|
118
|
|
|
public $oLt = null; |
|
119
|
|
|
|
|
120
|
|
|
/** |
|
121
|
|
|
* Output content generated |
|
122
|
|
|
* @var string |
|
123
|
|
|
*/ |
|
124
|
|
|
public $sOutput = ''; |
|
125
|
|
|
|
|
126
|
|
|
/** |
|
127
|
|
|
* Main content part of output content, normail is page main content |
|
128
|
|
|
* @var string |
|
129
|
|
|
*/ |
|
130
|
|
|
protected $sOutputContent = ''; |
|
131
|
|
|
|
|
132
|
|
|
/** |
|
133
|
|
|
* Footer part of output content |
|
134
|
|
|
* |
|
135
|
|
|
* In common, this will include some end part of <body> and etc. |
|
136
|
|
|
* @var string |
|
137
|
|
|
*/ |
|
138
|
|
|
protected $sOutputFooter = ''; |
|
139
|
|
|
|
|
140
|
|
|
/** |
|
141
|
|
|
* Header part of output content, normally is html header part |
|
142
|
|
|
* |
|
143
|
|
|
* In common, this will include all <html> and some beginner part of <body> |
|
144
|
|
|
* @var string |
|
145
|
|
|
*/ |
|
146
|
|
|
protected $sOutputHeader = ''; |
|
147
|
|
|
|
|
148
|
|
|
/** |
|
149
|
|
|
* Menu part of output content, optional |
|
150
|
|
|
* @var string |
|
151
|
|
|
*/ |
|
152
|
|
|
protected $sOutputMenu = ''; |
|
153
|
|
|
|
|
154
|
|
|
/** |
|
155
|
|
|
* If use tidy to format output html code, default false. |
|
156
|
|
|
* @var boolean |
|
157
|
|
|
*/ |
|
158
|
|
|
public $bOutputTidy = false; |
|
159
|
|
|
|
|
160
|
|
|
/** |
|
161
|
|
|
* If show debug info on footer ? |
|
162
|
|
|
* @var boolean |
|
163
|
|
|
*/ |
|
164
|
|
|
public $bShowDebugInfo = false; |
|
165
|
|
|
|
|
166
|
|
|
/** |
|
167
|
|
|
* Template object, auto new when first used. |
|
168
|
|
|
* @var object |
|
169
|
|
|
*/ |
|
170
|
|
|
public $oTpl = null; |
|
171
|
|
|
|
|
172
|
|
|
/** |
|
173
|
|
|
* Template file path |
|
174
|
|
|
* @var array |
|
175
|
|
|
*/ |
|
176
|
|
|
protected $aTplFile = array( |
|
177
|
|
|
'footer' => 'footer.tpl', |
|
178
|
|
|
'header' => 'header.tpl', |
|
179
|
|
|
'menu' => 'menu.tpl', |
|
180
|
|
|
); |
|
181
|
|
|
|
|
182
|
|
|
/** |
|
183
|
|
|
* Validator object. |
|
184
|
|
|
* @var object |
|
185
|
|
|
*/ |
|
186
|
|
|
public $oValidator = null; |
|
187
|
|
|
|
|
188
|
|
|
/** |
|
189
|
|
|
* Html <title> of this view |
|
190
|
|
|
* @var string |
|
191
|
|
|
*/ |
|
192
|
|
|
protected $sViewTitle = ''; |
|
193
|
|
|
|
|
194
|
|
|
|
|
195
|
|
|
// New Tpl object |
|
196
|
|
|
abstract protected function NewObjTpl(); |
|
197
|
|
|
|
|
198
|
|
|
|
|
199
|
|
|
/* |
|
200
|
|
|
// Changed to define directly in this class (below), |
|
201
|
|
|
// sub class only need to set tpl file name or do some other action. |
|
202
|
|
|
abstract public function GenFooter(); |
|
203
|
|
|
abstract public function GenHeader(); |
|
204
|
|
|
abstract public function GenMenu(); |
|
205
|
|
|
*/ |
|
206
|
|
|
|
|
207
|
|
|
// An template is given, point to action-relate method, |
|
208
|
|
|
// and will check method exists at first. |
|
209
|
|
|
//abstract protected function GenContent(); |
|
210
|
|
|
|
|
211
|
|
|
|
|
212
|
|
|
/** |
|
213
|
|
|
* construct |
|
214
|
|
|
* @param object &$ctl Caller controler object |
|
215
|
|
|
*/ |
|
216
|
|
|
public function __construct (&$ctl) { |
|
217
|
|
|
parent::__construct(); |
|
218
|
|
|
|
|
219
|
|
|
// For auto-new |
|
220
|
|
|
unset($this->oAjaxSelDiv); |
|
221
|
|
|
unset($this->oCache); |
|
222
|
|
|
unset($this->oForm); |
|
223
|
|
|
unset($this->oLt); |
|
224
|
|
|
unset($this->oTpl); |
|
225
|
|
|
unset($this->oValidator); |
|
226
|
|
|
|
|
227
|
|
|
$this->oCtl = $ctl; |
|
228
|
|
|
$this->sAction = GetGet('a'); |
|
|
|
|
|
|
229
|
|
|
|
|
230
|
|
|
/* |
|
231
|
|
|
$this->NewObjForm(); |
|
232
|
|
|
$this->NewObjTpl(); |
|
233
|
|
|
$this->NewObjLt(); |
|
234
|
|
|
*/ |
|
235
|
|
|
|
|
236
|
|
|
/* Template dir must be set before using |
|
237
|
|
|
$this->GenHeader(); |
|
238
|
|
|
$this->GenMenu(); |
|
239
|
|
|
$this->GenContent(); |
|
240
|
|
|
$this->GenFooter(); |
|
241
|
|
|
*/ |
|
242
|
|
|
} // end of func __construct |
|
243
|
|
|
|
|
244
|
|
|
|
|
245
|
|
|
/** |
|
246
|
|
|
* Auto new obj if not set, for some special var only |
|
247
|
|
|
* |
|
248
|
|
|
* @param string $name |
|
249
|
|
|
* @return object |
|
250
|
|
|
*/ |
|
251
|
|
View Code Duplication |
public function __get($name) |
|
|
|
|
|
|
252
|
|
|
{ |
|
253
|
|
|
if ('o' == $name{0}) { |
|
254
|
|
|
$s_func = 'NewObj' . substr($name, 1); |
|
255
|
|
|
if (method_exists($this, $s_func)) { |
|
256
|
|
|
// New object |
|
257
|
|
|
$this->$name = $this->$s_func(); |
|
258
|
|
|
return $this->$name; |
|
259
|
|
|
} |
|
260
|
|
|
} |
|
261
|
|
|
|
|
262
|
|
|
return null; |
|
263
|
|
|
} // end of func __get |
|
264
|
|
|
|
|
265
|
|
|
|
|
266
|
|
|
/** |
|
267
|
|
|
* Get content to output with cache |
|
268
|
|
|
* |
|
269
|
|
|
* @return string |
|
270
|
|
|
*/ |
|
271
|
|
|
public function CacheGetOutput() { |
|
272
|
|
|
$key = $this->CacheKey(); |
|
273
|
|
|
|
|
274
|
|
|
if ('0' == GetGet('cache')) { |
|
|
|
|
|
|
275
|
|
|
// Cache temp off, but still gen & set |
|
276
|
|
|
$s = NULL; |
|
277
|
|
|
} else { |
|
278
|
|
|
// Try get |
|
279
|
|
|
$s = $this->oCache->Get($key, $this->CacheLifetime()); |
|
280
|
|
|
} |
|
281
|
|
|
|
|
282
|
|
|
if (is_null($s)) { |
|
283
|
|
|
// Cache invalid, gen and set |
|
284
|
|
|
$s = $this->GetOutput(); |
|
285
|
|
|
$this->oCache->Set($key, $s, $this->CacheLifetime()); |
|
286
|
|
|
} |
|
287
|
|
|
|
|
288
|
|
|
return $s; |
|
289
|
|
|
} // end of func CacheGetOutput |
|
290
|
|
|
|
|
291
|
|
|
|
|
292
|
|
|
/** |
|
293
|
|
|
* Gen key of cache by request uri |
|
294
|
|
|
* |
|
295
|
|
|
* @return string |
|
296
|
|
|
*/ |
|
297
|
|
|
public function CacheKey() { |
|
298
|
|
|
$key = $_SERVER['REQUEST_URI']; |
|
299
|
|
|
$key = str_replace(array('?', '&', '=', '//'), '/', $key); |
|
300
|
|
|
|
|
301
|
|
|
// When force update cache, ignore 'cache=0' in url |
|
302
|
|
|
if ('0' == GetGet('cache')) { |
|
|
|
|
|
|
303
|
|
|
// Can't unset($_GET['cache']); |
|
304
|
|
|
// Because it's used later |
|
305
|
|
|
$key = str_replace('/cache/0', '', $key); |
|
306
|
|
|
} |
|
307
|
|
|
|
|
308
|
|
|
// Remove tailing '/' |
|
309
|
|
View Code Duplication |
if ('/' == substr($key, -1)) |
|
|
|
|
|
|
310
|
|
|
$key = substr($key, 0, strlen($key) - 1); |
|
311
|
|
|
|
|
312
|
|
|
return $key; |
|
313
|
|
|
} // end of func CacheKey |
|
314
|
|
|
|
|
315
|
|
|
|
|
316
|
|
|
/** |
|
317
|
|
|
* Got cache lifetime, by second |
|
318
|
|
|
* Should often re-define in sub class. |
|
319
|
|
|
* |
|
320
|
|
|
* @param string $key |
|
321
|
|
|
* @return int |
|
322
|
|
|
*/ |
|
323
|
|
|
public function CacheLifetime ($key = '') { |
|
324
|
|
|
if (empty($key)) |
|
325
|
|
|
$key = $this->CacheKey(); |
|
|
|
|
|
|
326
|
|
|
|
|
327
|
|
|
// Default 60s * 60m = 3600s |
|
328
|
|
|
return 3600; |
|
329
|
|
|
} // end of func CacheLifetime |
|
330
|
|
|
|
|
331
|
|
|
|
|
332
|
|
|
/** |
|
333
|
|
|
* Generate main content of page |
|
334
|
|
|
* |
|
335
|
|
|
* Doing this by call sub-method according to $sAction, |
|
336
|
|
|
* Also, this can be override by extended class. |
|
337
|
|
|
*/ |
|
338
|
|
|
public function GenContent() { |
|
339
|
|
|
if ('content' == strtolower($this->sAction)) |
|
340
|
|
|
$this->oCtl->ViewErrorDisp("Action shoud not named 'content'."); |
|
341
|
|
|
|
|
342
|
|
|
if (empty($this->sAction)) |
|
343
|
|
|
$this->oCtl->ViewErrorDisp("No action given."); |
|
344
|
|
|
|
|
345
|
|
|
// Check if action relate method existence, |
|
346
|
|
|
// call it or report error. |
|
347
|
|
|
$s_func = StrUnderline2Ucfirst($this->sAction, true); |
|
|
|
|
|
|
348
|
|
|
$s_func1 = 'Gen' . $s_func; |
|
349
|
|
|
$s_func2 = 'GenContent' . $s_func; |
|
350
|
|
|
if (method_exists($this, $s_func1)) { |
|
351
|
|
|
$this->sOutputContent = $this->$s_func1(); |
|
352
|
|
|
return $this->sOutputContent; |
|
353
|
|
|
} |
|
354
|
|
|
elseif (method_exists($this, $s_func2)) { |
|
355
|
|
|
$this->sOutputContent = $this->$s_func2(); |
|
356
|
|
|
return $this->sOutputContent; |
|
357
|
|
|
} |
|
358
|
|
|
// ?a=ajax-something |
|
359
|
|
|
elseif ('ajax-' == strtolower(substr($this->sAction, 0, 5)) |
|
360
|
|
|
&& method_exists($this, $s_func)) { |
|
361
|
|
|
$this->sOutputContent = $this->$s_func(); |
|
362
|
|
|
return $this->sOutputContent; |
|
363
|
|
|
} |
|
364
|
|
|
else |
|
365
|
|
|
// An invalid action is given |
|
366
|
|
|
$this->oCtl->ViewErrorDisp("The given action {$this->sAction} invalid or method $s_func1 doesn't exists."); |
|
367
|
|
|
} // end of func GenContent |
|
368
|
|
|
|
|
369
|
|
|
|
|
370
|
|
|
/** |
|
371
|
|
|
* Generate footer part |
|
372
|
|
|
*/ |
|
373
|
|
|
public function GenFooter() { |
|
374
|
|
|
$this->sOutputFooter = $this->oTpl->fetch($this->aTplFile['footer']); |
|
375
|
|
|
|
|
376
|
|
|
// Set time used and db query executed time |
|
377
|
|
|
if ($this->bShowDebugInfo) |
|
378
|
|
|
$this->sOutputFooter = str_replace('<!-- debug info -->' |
|
379
|
|
|
, $this->oCtl->GetDebugInfo($this) |
|
380
|
|
|
. '<!-- debug info -->' |
|
381
|
|
|
, $this->sOutputFooter); |
|
382
|
|
|
|
|
383
|
|
|
return $this->sOutputFooter; |
|
384
|
|
|
} // end of func GenFooter |
|
385
|
|
|
|
|
386
|
|
|
|
|
387
|
|
|
/** |
|
388
|
|
|
* Generate header part |
|
389
|
|
|
* |
|
390
|
|
|
* @see $aCss, $aJs |
|
391
|
|
|
*/ |
|
392
|
|
|
public function GenHeader () { |
|
393
|
|
|
$this->oTpl->assignByRef('css', $this->aCss); |
|
394
|
|
|
|
|
395
|
|
|
$this->aJs = array_unique($this->aJs); |
|
396
|
|
|
$this->oTpl->assignByRef('js', $this->aJs); |
|
397
|
|
|
|
|
398
|
|
|
$this->sOutputHeader = $this->oTpl->fetch($this->aTplFile['header']); |
|
399
|
|
|
return $this->sOutputHeader; |
|
400
|
|
|
} // end of func GenHeader |
|
401
|
|
|
|
|
402
|
|
|
|
|
403
|
|
|
/** |
|
404
|
|
|
* Generate menu part |
|
405
|
|
|
*/ |
|
406
|
|
|
public function GenMenu() |
|
407
|
|
|
{ |
|
408
|
|
|
$this->sOutputMenu = $this->oTpl->fetch($this->aTplFile['menu']); |
|
409
|
|
|
return $this->sOutputMenu; |
|
410
|
|
|
} // end of func GenMenu |
|
411
|
|
|
|
|
412
|
|
|
|
|
413
|
|
|
/** |
|
414
|
|
|
* Get content to output |
|
415
|
|
|
* |
|
416
|
|
|
* @return string |
|
417
|
|
|
* @see $sOutput |
|
418
|
|
|
*/ |
|
419
|
|
|
public function GetOutput () { |
|
420
|
|
|
if (empty($this->sOutputContent)) |
|
421
|
|
|
$this->sOutputContent = $this->GenContent(); |
|
422
|
|
|
if (empty($this->sOutputHeader)) |
|
423
|
|
|
$this->sOutputHeader = $this->GenHeader(); |
|
424
|
|
|
if (empty($this->sOutputMenu)) |
|
425
|
|
|
$this->sOutputMenu = $this->GenMenu(); |
|
426
|
|
|
if (empty($this->sOutputFooter)) |
|
427
|
|
|
$this->sOutputFooter = $this->GenFooter(); |
|
428
|
|
|
$this->sOutput = $this->sOutputHeader . |
|
429
|
|
|
$this->sOutputMenu . |
|
430
|
|
|
$this->sOutputContent . |
|
431
|
|
|
$this->sOutputFooter; |
|
432
|
|
|
|
|
433
|
|
|
// Use tidy ? |
|
434
|
|
|
if (true == $this->bOutputTidy) |
|
|
|
|
|
|
435
|
|
|
$this->sOutput = $this->Tidy($this->sOutput); |
|
436
|
|
|
|
|
437
|
|
|
return $this->sOutput; |
|
438
|
|
|
} // end of func GetOutput |
|
439
|
|
|
|
|
440
|
|
|
|
|
441
|
|
|
/** |
|
442
|
|
|
* New AjaxSelectDiv object |
|
443
|
|
|
* |
|
444
|
|
|
* @see $oAjaxSelectDiv |
|
445
|
|
|
*/ |
|
446
|
|
|
protected function NewObjAjaxSelDiv() { |
|
447
|
|
|
return new AjaxSelDiv(); |
|
|
|
|
|
|
448
|
|
|
} // end of func NewObjAjaxSelDiv |
|
449
|
|
|
|
|
450
|
|
|
|
|
451
|
|
|
/** |
|
452
|
|
|
* New Cache object |
|
453
|
|
|
* |
|
454
|
|
|
* Need replace by sub class, assign cache type |
|
455
|
|
|
* |
|
456
|
|
|
* @see $oCache |
|
457
|
|
|
*/ |
|
458
|
|
|
protected function NewObjCache () { |
|
459
|
|
|
return Cache::Create(''); |
|
|
|
|
|
|
460
|
|
|
} // end of func NewObjCache |
|
461
|
|
|
|
|
462
|
|
|
|
|
463
|
|
|
/** |
|
464
|
|
|
* New Form object |
|
465
|
|
|
* |
|
466
|
|
|
* @see $oForm |
|
467
|
|
|
*/ |
|
468
|
|
|
protected function NewObjForm() { |
|
469
|
|
|
return new Form; |
|
470
|
|
|
} // end of func NewObjForm |
|
471
|
|
|
|
|
472
|
|
|
|
|
473
|
|
|
/** |
|
474
|
|
|
* New ListTable object |
|
475
|
|
|
* |
|
476
|
|
|
* @see $oLt |
|
477
|
|
|
*/ |
|
478
|
|
|
protected function NewObjLt() { |
|
479
|
|
|
return new ListTable($this->oTpl); |
|
|
|
|
|
|
480
|
|
|
} // end of func NewObjLt |
|
481
|
|
|
|
|
482
|
|
|
|
|
483
|
|
|
/** |
|
484
|
|
|
* New Validator object |
|
485
|
|
|
* |
|
486
|
|
|
* @see $oValidator |
|
487
|
|
|
* @return object |
|
488
|
|
|
*/ |
|
489
|
|
|
protected function NewObjValidator () { |
|
490
|
|
|
return new Validator(); |
|
|
|
|
|
|
491
|
|
|
} // end of func NewObjValidator |
|
492
|
|
|
|
|
493
|
|
|
|
|
494
|
|
|
/** |
|
495
|
|
|
* Set <title> of view page |
|
496
|
|
|
* @param string $title |
|
497
|
|
|
*/ |
|
498
|
|
|
public function SetViewTitle($title) |
|
499
|
|
|
{ |
|
500
|
|
|
// Init tpl variables set |
|
501
|
|
|
$this->oTpl->assignByRef('view_title', $this->sViewTitle); |
|
502
|
|
|
|
|
503
|
|
|
$this->sViewTitle = $title; |
|
504
|
|
|
$this->sOutputHeader = $this->GenHeader(); |
|
505
|
|
|
} // end of func SetViewTitle |
|
506
|
|
|
|
|
507
|
|
|
|
|
508
|
|
|
/** |
|
509
|
|
|
* Use tidy to format html string |
|
510
|
|
|
* |
|
511
|
|
|
* @param string &$html |
|
512
|
|
|
* @return string |
|
513
|
|
|
*/ |
|
514
|
|
View Code Duplication |
public function Tidy (&$html) { |
|
|
|
|
|
|
515
|
|
|
if (true == class_exists("tidy")) { |
|
|
|
|
|
|
516
|
|
|
// Specify configuration |
|
517
|
|
|
$config = array( |
|
518
|
|
|
'doctype' => 'strict', |
|
519
|
|
|
'indent' => true, |
|
520
|
|
|
'indent-spaces' => 2, |
|
521
|
|
|
'output-xhtml' => true, |
|
522
|
|
|
'wrap' => 200 |
|
523
|
|
|
); |
|
524
|
|
|
// Do tidy |
|
525
|
|
|
$tidy = new tidy; |
|
526
|
|
|
$tidy->parseString($html, $config, 'utf8'); |
|
527
|
|
|
$tidy->cleanRepair(); |
|
528
|
|
|
|
|
529
|
|
|
return tidy_get_output($tidy); |
|
530
|
|
|
} else { |
|
531
|
|
|
$this->Log('Tidy is not installed !', 4); |
|
532
|
|
|
return $html; |
|
533
|
|
|
} |
|
534
|
|
|
} // end of func Tidy |
|
535
|
|
|
|
|
536
|
|
|
} // end of class View |
|
537
|
|
|
?> |
|
|
|
|
|
|
538
|
|
|
|
This class, trait or interface has been deprecated. The supplier of the file has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the type will be removed from the class and what other constant to use instead.