]> git.llucax.com Git - software/bife/hit.git/blob - src/HTML/Template/HIT.php
Removed \n at the end of the file and added a VIM option to keep it as is.
[software/bife/hit.git] / src / HTML / Template / HIT.php
1 <?php
2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
3 // +--------------------------------------------------------------------+
4 // |                       BIFE - Buil It FastEr                        |
5 // +--------------------------------------------------------------------+
6 // | This file is part of BIFE.                                         |
7 // |                                                                    |
8 // | BIFE is free software; you can redistribute it and/or modify it    |
9 // | under the terms of the GNU General Public License as published by  |
10 // | the Free Software Foundation; either version 2 of the License, or  |
11 // | (at your option) any later version.                                |
12 // |                                                                    |
13 // | BIFE is distributed in the hope that it will be useful, but        |
14 // | WITHOUT ANY WARRANTY; without even the implied warranty of         |
15 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   |
16 // | General Public License for more details.                           |
17 // |                                                                    |
18 // | You should have received a copy of the GNU General Public License  |
19 // | along with Hooks; if not, write to the Free Software Foundation,   |
20 // | Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      |
21 // +--------------------------------------------------------------------+
22 // | Created: Wed Jun 17 19:03:14 2003                                  |
23 // | Authors: Leandro Lucarella <luca@lugmen.org.ar>                    |
24 // +--------------------------------------------------------------------+
25 //
26 // $Id$
27 //
28
29 // +X2C Class 130 :HIT
30 /**
31  * Hooks vs IT Template Engine.
32 Hooks vs IT (HIT) is a simple template implementation, based on hooks and IT template systems.
33  *
34  * @package HTML_Template
35  * @access public
36  */
37 class HTML_Template_HIT {
38     /**
39      * Root directory where template files are.
40      *
41      * @var    string $root
42      * @access public
43      */
44     var $root = '.';
45
46     /**
47      * If it's true, it looks for template files in PHP's include_path.
48      *
49      * @var    bool $useIncludePath
50      * @access public
51      */
52     var $useIncludePath = false;
53
54     /**
55      * Group of templates to use (a subdirectory in root).
56      *
57      * @var    string $group
58      * @access protected
59      */
60     var $group = '';
61
62     /**
63      * Templates cache.
64      *
65      * @var    array $cache
66      * @access protected
67      */
68     var $cache = array();
69
70     /**
71      * Parsed templates buffer.
72      *
73      * @var    array $buffer
74      * @access protected
75      */
76     var $buffer = array();
77
78     // ~X2C
79
80     // +X2C Operation 136
81     /**
82      * Constructor.
83      *
84      * @param  string $root Root directory where template files are.
85      * @param  bool $useIncludePath If it's true, it looks for template files in PHP's include_path.
86      * @param  string $group Group of templates to use (a subdirectory in root).
87      *
88      * @return void
89      * @access public
90      */
91     function HTML_Template_HIT($root = '.', $useIncludePath = false, $group = '') // ~X2C
92     {
93         $this->__construct($root, $useIncludePath, $group);
94     }
95     // -X2C
96
97     // +X2C Operation 137
98     /**
99      * Constructor.
100      *
101      * @param  int $root Root directory where template files are.
102      * @param  false $useIncludePath If it's true, it looks for template files in PHP's include_path.
103      * @param  string $group Group of templates to use (a subdirectory in root).
104      *
105      * @return void
106      * @access public
107      */
108     function __construct($root = '.', $useIncludePath = false, $group = '') // ~X2C
109     {
110         $this->root = $root;
111         $this->useIncludePath = $useIncludePath;
112         $this->pushGroup($group);
113     }
114     // -X2C
115
116     // +X2C Operation 138
117     /**
118      * Parse a template returning the results.
119 If $vars is an array, the {[keys]} are replaced with [values] ($val is ignored). If is a string, {$vars} is replaced with $val.
120      *
121      * @param  string $name Name of template to parse.
122      * @param  mixed $vars Variables to replace in the template.
123      * @param  string $val If $vars is a string, the value to replace for $vars.
124      * @param  mixed $group Group to use to parse this template. Null to use the current group.
125      *
126      * @return string
127      * @access public
128      */
129     function parse($name, $vars = '', $val = '', $group = null) // ~X2C
130     {
131         $group = is_null($group) ? end($this->group) : $group;
132         if ($group) {
133             $file = "{$this->root}/$group/$name.tpl.html";
134         } else {
135             $file = "{$this->root}/$name.tpl.html";
136         }
137         if (!isset($this->cache[$file])) {
138             // FIXME - replace join(file()) with file_get_contents().
139             $this->cache[$file] = join('', file($file, $this->useIncludePath));
140         }
141         if ($vars) {
142             if (is_string($vars)) {
143                 $vars = array($vars => $val);
144             }
145             foreach ($vars as $key => $val) {
146                 $keys[] = '{' . $key . '}';
147                 $vals[] = $val;
148             }
149             return str_replace($keys, $vals, $this->cache[$file]);
150         } else {
151             return $this->cache[$file];
152         }
153     }
154     // -X2C
155
156     // +X2C Operation 144
157     /**
158      * Parse a template adding the results to the buffer.
159 Parse a template appending the results to an internal buffer. If $vars is an array, the {[keys]} are replaced with [values] ($val is ignored). If is a string, {$vars} is replaced with $val.
160      *
161      * @param  string $name Name of template to parse.
162      * @param  mixed $vars Variables to replace in the template.
163      * @param  string $val If $vars is a string, the value to replace for $vars.
164      *
165      * @return void
166      * @access public
167      */
168     function parseBuffered($name, $vars = '', $val = '') // ~X2C
169     {
170         @$this->buffer["{$this->group}/$name"] .= $this->parse($name, $vars, $val);
171     }
172     // -X2C
173
174     // +X2C Operation 145
175     /**
176      * Gets a parsed buffer.
177      *
178      * @param  string $name Name of the parsed template to get.
179      *
180      * @return string
181      * @access public
182      */
183     function getBuffer($name) // ~X2C
184     {
185         return @$this->buffer["{$this->group}/$name"];
186     }
187     // -X2C
188
189     // +X2C Operation 146
190     /**
191      * Gets a parsed buffer and removes it.
192      *
193      * @param  string $name Name of the buffer to flush.
194      *
195      * @return void
196      * @access public
197      */
198     function popBuffer($name) // ~X2C
199     {
200         $return = @$this->buffer["{$this->group}/$name"];
201         unset($this->buffer["{$this->group}/$name"]);
202         return $return;
203     }
204     // -X2C
205
206     // +X2C Operation 139
207     /**
208      * Sets the group to use and add it to the groups stack.
209      *
210      * @param  string $group Group to use.
211      *
212      * @return void
213      * @access public
214      */
215     function pushGroup($group = '') // ~X2C
216     {
217         $this->group[] = $group;
218     }
219     // -X2C
220
221     // +X2C Operation 140
222     /**
223      * Removes the group from the groups stack and returns to the previous used group.
224      *
225      * @return string
226      * @access public
227      */
228     function popGroup() // ~X2C
229     {
230         return array_pop($this->group);
231     }
232     // -X2C
233
234     // +X2C Operation 159
235     /**
236      * Tells if a template exists.
237 True if the template $name exists in $group (or the current group).
238      *
239      * @param  string $name Name of the template.
240      * @param  mixed $group Template's group. If it's null it uses the current group.
241      *
242      * @return bool
243      * @access public
244      */
245     function exists($name, $group = null) // ~X2C
246     {
247         $group = is_null($group) ? end($this->group) : $group;
248         if ($group) {
249             $file = "{$this->root}/$group/$name.tpl.html";
250         } else {
251             $file = "{$this->root}/$name.tpl.html";
252         }
253         if (!$this->useIncludePath) {
254             return is_readable($file);
255         } else {
256             $include_path = array_unique(preg_split('/[:;]/', ini_get('include_path')));
257             foreach ($include_path as $path) {
258                 if (is_readable("$path/$file")) {
259                     return true;
260                 }
261             }
262             return false;
263         }
264     }
265     // -X2C
266
267 } // -X2C Class :HIT
268
269 ?>