-
Notifications
You must be signed in to change notification settings - Fork 4
/
Template.php
183 lines (159 loc) · 3.3 KB
/
Template.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
<?php
/**
* PHP Template
*
* Template Inheritance allows HTML views to manage themselves, saving the
* controllers from worrying about display logic. In short, inheritance in
* your templates offers the same decoupling benefits as standard PHP objects
* making it easier to manage presentation.
*
* This class is more powerful than it looks.
*
* @package PHP-Template
* @author http://github.com/Xeoncross/php-template
* @copyright (c) 2011 David Pennington <http://xeoncross.com>
* @license MIT License
********************************** 80 Columns *********************************
*/
/**
* Helper function to make it easier to work with template objects.
*
* @param string $file the template file to load
* @return object
*/
function template($file)
{
return new Template($file);
}
/**
* PHP Template Class
*/
class Template
{
static $path = 'view/';
public $__file, $__blocks, $__append;
/**
* Returns a new template object
*
* @param string $file the template file to load
*/
public function __construct($file)
{
$this->__file = $file;
}
/**
* Allows setting template values while still returning the object instance
* $template->title($title)->text($text);
*
* @return this
*/
public function __call($key, $args)
{
$this->$key = $args[0];
return $this;
}
/**
* Render template HTML
*
* @return string
*/
public function __toString()
{
try {
return $this->load($this->__file);
}
catch(\Exception $e)
{
return (string) $e;
}
}
/**
* Load the given template
*
* @param string $__f file name
* @return string
*/
public function load($__f)
{
ob_start();
extract((array) $this);
require self::$path . $__f . '.php';
return ob_get_clean();
}
/**
* Extend a parent template
*
* @param string $__f name of template
*/
public function extend($__f)
{
ob_end_clean(); // Ignore this child class and load the parent!
ob_start();
print $this->load($__f);
}
/**
* Start a new block
*/
public function start()
{
ob_start();
}
/**
* Empty default block to be extended by child templates
*
* @param string $name of block
*/
public function block($name)
{
if(isset($this->__blocks[$name]))
{
return $this->__blocks[$name];
}
}
/**
* End a block
*
* @param string $name name of block
* @param boolean $keep_parent true to append parent block contents
* @param mixed $filter functions
*/
public function end($name, $keep_parent = FALSE, $filters = NULL)
{
$buffer = ob_get_clean();
foreach((array) $filters as $filter)
{
$buffer = $filter($buffer);
}
// This block is already set
if( ! isset($this->__blocks[$name]))
{
$this->__blocks[$name] = $buffer;
if($keep_parent) $this->__append[$name] = TRUE;
}
elseif(isset($this->__append[$name]))
{
$this->__blocks[$name] .= $buffer;
}
print $this->__blocks[$name];
}
/**
* Convert special characters to HTML safe entities
*
* @param string $string to encode
* @return string
*/
public function e($string)
{
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
/**
* Convert dangerous HTML entities into special characters
*
* @param string $s string to decode
* @return string
*/
public function d($string)
{
return htmlspecialchars_decode($string, ENT_QUOTES, 'UTF-8');
}
}