View difference between Paste ID: nCaxdgEx and hDJgZLTE
SHOW: | | - or go back to the newest paste.
1-
public function phpize_var($var)
1+
<?php
2
3
/**
4
 * 
5
 *
6
 * @author Sebastian Büttner <sebastian.buettner@powerserverplus.net>
7
 * @package void
8
 * @version 1.0.0
9
 * @copyright (c) 2013, powerserverplus.net
10
 */
11
12
class FileNotFoundException extends Exception {}
13
14
class Template
15
{
16
	/**
17
	 * Whether to use debugging or not
18
	 */
19
	const DEBUG = true;
20
21
	/** 
22
	 * @var String Path to tempalte dir
23
	 */
24
	const template_dir = 'templates';
25
26
	/**
27
	 * @var String (sub)template filename
28-
				$php .= 'array(';
28+
	 */
29
	protected $template = '';
30
31
	/**
32-
					$php .= $this->phpize_var($key) . 
32+
	 * @var Array data to be used within the template
33
	 */
34-
							$this->phpize_var($value) .
34+
	protected $data;
35
36
    /**
37
     * Template constructor
38
     * 
39
     * @param String $templ name of the template
40
     */
41
	public function __construct($templ, $layout = 'index')
42
	{
43
		$this->load($layout);
44
45
		$this->data = array();
46
		$this->assign('subtemplate', $templ);
47
	}
48
49
	/**
50
	 * Save a passed variable for later use in template
51
	 *
52
	 * @param String $name name of the varaible used to identify
53-
	}
53+
	 * @param Mixed $value value to be assigned to the variable
54
	 */
55
	public function assign($name, $value)
56
	{
57
		/* Separate name by dot */
58
		$path = explode('.', $name);
59
60
		/* Take the last element of the array, as this is our final identifier */
61
		$lastKey = array_pop($path);
62
63
		/* Create / fill array structure, start with the template`s data base array */
64
		$parent = &$this->data;
65
66
		/* Iterate through the given name structure... */
67
		foreach ($path as $key)
68
		{
69
			/* ...And create substructres where needed */
70
			if (!isset($parent[$key]))
71
				$parent[$key] = array();
72
73
			/* Move the parent `pointer` deeper within the structure */
74
			$parent = &$parent[$key];
75
		}
76
77
		/* Finally assign the value to the deepest element in structure */
78
		$parent[$lastKey] = $value;
79
	}
80
81
	/*
82
	 *
83
	 */
84
	public function phpize_var($var, $intend = false)
85
	{
86
		$php = '';
87
88
		switch ( gettype($var) )
89
		{
90
			case 'boolean':
91
				$php .= $var === true ? 'true' : 'false';
92
93
				break;
94
95
			case 'integer':
96
			case 'double':
97
				$php .= $var;
98
99
				break;
100
101
			case 'string':
102
				$php .= "'" . 
103
						str_replace("'", "\\'", $var) .
104
						"'";
105
106
				break;
107
108
			case 'object':
109
				$php .= '(object)';
110
			case 'array':
111
				$php .= 'array(' . ($intend ? "\n" : '') ;
112
113
				foreach ($var as $key => $value) 
114
				{
115
					$php .= $this->phpize_var($key, $intend) . 
116
							' => ' . 
117
							$this->phpize_var($value, $intend) .
118
							', ';
119
120
					if ($intend)
121
						$php .= "\n";
122
				}
123
124
				$php .= ')';
125
126
				break;
127
128
			case 'NULL':
129
				$php .= 'NULL';
130
131
				break;
132
133
			case 'resource':
134
			default:
135
136
		}
137
138
		if ($intend)
139
			$php = str_replace("\n", "\n  ", $php);
140
141
		return $php;
142
	}
143
144
	/**
145
	 * Prepare and display the tempalte
146
	 *
147
	 */
148
	public function display()
149
	{
150
		/* We start with no code */
151
		$template_code = '';
152
153
		/* Merge template data with session-flash data */
154
		$data = $this->data;
155
156
		if (isset($_SESSION['appends']) && is_array($_SESSION['appends']) && !empty($_SESSION['appends']))
157
			$data = array_merge($data, $_SESSION['appends']);
158
159
		$_SESSION['appends'] = array();
160
161
		/* And iterate then over all passed variables, making them executable code again */
162
		foreach ($data as $key => $value)
163
		{
164
			/* Secure that variables are valid for php */
165
			if (! preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/ims', $key) )
166
				continue;
167
168
			/* Add a new line to the template code */
169
			$template_code .= 
170
				/* Write varaible name */
171
				'$' . $key . ' = ' . $this->phpize_var($value, true) . ';' . "\n";
172
173
		}
174
175
		$template_vars = $template_code;
176
177
		/* Put a php close tag, as we are continuing with out html-code-template */
178
		$template_code .= '?>';
179
180
		/* Append the template */
181
		$template_code .= file_get_contents($this->template);
182
183
		/* Execute the build string as PHP-Code */
184
		eval($template_code);
185
186
		/* Debug */
187
188
		if (self::DEBUG)
189
		{
190
			echo "<div style='display: none; width: 80%; position: absolute; top: 50px; left: 50%; margin-left: -45%; background: url(/images/bg.png); z-index: 1001; border-radius: 8px; border: 4px solid #E6572C; padding: 30px; color: #555; text-shadow: 0 1px 1px #fff ' id='debug'>\n";
191
			echo "<h3 style='font-style: normal; color: #E6572C; border-bottom: 2px solid #bbb; margin-bottom: 20px;'>Template vars:</h3><pre style='background: #ffffff; border-radius: 2px; border: 1px solid #aaa; padding: 5px; margin: 10px 0;'>" . ($template_vars) . "</pre>";
192
			echo "</div>";
193
		}
194
		echo "<script type='text/javascript'>$(document).ready( function(){ $(document).keypress( function(e){ if (e.keyCode == 100) $('#debug').slideToggle() } ) } );</script>\n";
195
	}
196
197
	/**
198
	 * Includes a given template by name
199
	 *
200
	 * @param String $templ the name of the tempalte file to be included
201
	 */
202
	static function getInclude($templ)
203
	{
204
		/* Build the full path of the file to load */
205
		$filename = Template::template_dir . '/' . $templ . '.template.php';
206
207
		/* Check whether the requested file does exist, if not throw exception */
208
		if ( ! file_exists($filename) )
209
			throw new FileNotFoundException('Template file ' . $filename . ' not found.');
210
211
		/* return the filename to include */
212
		return $filename;
213
	}
214
215
	/**
216
	 * Helper function, gives $default back when $var is unset
217
	 *
218
	 * @param Mixed $var 
219
	 * @param Mixed $default
220
	 *
221
	 */
222
	static function withDefault(&$var, $default)
223
	{
224
		if (!isset($var))
225
			return $default;
226
		
227
		return $var;
228
	}
229
230
	/**
231
	 * Try to load template by name, can throw FileNotFoundException
232
	 * 
233
	 * @param String $templ template name
234
	 */
235
	private function load($templ)
236
	{
237
		/* Build the full path of the file to load */
238
		$filename = Template::template_dir . '/' . $templ . '.template.php';
239
240
		/* Check whether the requested file does exist, if not throw exception */
241
		if ( ! file_exists($filename) )
242
			throw new FileNotFoundException('Template file ' . $filename . ' not found.');
243
244
		/* Set the filename of the template */
245
		$this->template = $filename;
246
	}
247
248
249
}
250
251
?>