]> git.llucax.com Git - software/bife/bife-all.git/blob - src/HTML/Template/HIT.php
- Added cache capabilities to the Parser (activated by default).
[software/bife/bife-all.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 (HIT) is a simple template implementation, based on hooks and IT template systems.
32  *
33  * @access public
34  */
35 class HTML_Template_HIT {
36     /**
37      * Root directory where template files are.
38      *
39      * @var    string $root
40      * @access public
41      */
42     var $root = '.';
43
44     /**
45      * Group of templates to use (a subdirectory in root).
46      *
47      * @var    string $group
48      * @access protected
49      */
50     var $group = '';
51
52     /**
53      * Templates cache.
54      *
55      * @var    array $cache
56      * @access protected
57      */
58     var $cache = array();
59
60     /**
61      * @var    array $buffer
62      * @access protected
63      */
64     var $buffer = array();
65
66     // ~X2C
67
68     // +X2C Operation 136
69     /**
70      * Constructor.
71      *
72      * @param  string $root Root directory where template files are.
73      * @param  string $group Group of templates to use (a subdirectory in root).
74      *
75      * @return void
76      * @access public
77      */
78     function HTML_Template_HIT($root = '.', $group = '') // ~X2C
79     {
80         $this->__construct($root, $group);
81     }
82     // -X2C
83
84     // +X2C Operation 137
85     /**
86      * Constructor.
87      *
88      * @param  int $root Root directory where template files are.
89      * @param  int $group Group of templates to use (a subdirectory in root).
90      *
91      * @return void
92      * @access public
93      */
94     function __construct($root = '.', $group = '') // ~X2C
95     {
96         $this->root = $root;
97         $this->setGroup($group);
98     }
99     // -X2C
100
101     // +X2C Operation 138
102     /**
103      * Parse a template returning the results.
104 If $vars is an array, the {[keys]} are replaced with [values] ($val is ignored). If is a string, {$vars} is replaced with $val.
105      *
106      * @param  string $name Name of template to parse.
107      * @param  mixed $vars Variables to replace in the template.
108      * @param  string $val If $vars is a string, the value to replace for $vars.
109      *
110      * @return string
111      * @access public
112      */
113     function parse($name, $vars = '', $val = '') // ~X2C
114     {
115         $group = end($this->group);
116         if ($group) {
117             $file = "{$this->root}/$group/$name.tpl.html";
118         } else {
119             $file = "{$this->root}/$name.tpl.html";
120         }
121         if (!isset($this->cache[$file])) {
122             // FIXME - replace join(file()) with file_get_contents().
123             $this->cache[$file] = join('', file($file));
124         }
125         //if (!is_readable($file)) {
126         //    trigger_error("Can't read '$file'.");
127         //}
128         if ($vars) {
129             if (is_string($vars)) {
130                 $vars = array($vars => $val);
131             }
132             foreach ($vars as $key => $val) {
133                 $keys[] = '{' . $key . '}';
134                 $vals[] = $val;
135             }
136             return str_replace($keys, $vals, $this->cache[$file]);
137         } else {
138             return $this->cache[$file];
139         }
140     }
141     // -X2C
142
143     // +X2C Operation 144
144     /**
145      * Parse a template buffering the results.
146 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.
147      *
148      * @param  string $name Name of template to parse.
149      * @param  mixed $vars Variables to replace in the template.
150      * @param  string $val If $vars is a string, the value to replace for $vars.
151      *
152      * @return void
153      * @access public
154      */
155     function parseBuffered($name, $vars = '', $val = '') // ~X2C
156     {
157         @$this->buffer["{$this->group}/$name"] .= $this->parse($name, $vars, $val);
158     }
159     // -X2C
160
161     // +X2C Operation 145
162     /**
163      * Gets a parsed buffer.
164      *
165      * @param  string $name Name of the parsed template to get.
166      * @param  bool $flush Flush buffer.
167      *
168      * @return string
169      * @access public
170      */
171     function getBuffer($name, $flush = true) // ~X2C
172     {
173         return @$this->buffer["{$this->group}/$name"];
174     }
175     // -X2C
176
177     // +X2C Operation 146
178     /**
179      * Gets a parsed buffer and removes it.
180      *
181      * @param  int $name Name of the buffer to flush.
182      *
183      * @return void
184      * @access public
185      */
186     function popBuffer($name = '') // ~X2C
187     {
188         $return = @$this->buffer["{$this->group}/$name"];
189         unset($this->buffer["{$this->group}/$name"]);
190         return $return;
191     }
192     // -X2C
193
194     // +X2C Operation 139
195     /**
196      * Sets the group to use and add it to the groups stack.
197      *
198      * @param  string $group Group to use.
199      *
200      * @return void
201      * @access public
202      */
203     function setGroup($group = '') // ~X2C
204     {
205         if ($group) {
206             $this->group[] = $group;
207         } else {
208             $this->group[] = '';
209         }
210     }
211     // -X2C
212
213     // +X2C Operation 140
214     /**
215      * Removes the group from the groups stack and returns to the previous used group.
216      *
217      * @return void
218      * @access public
219      */
220     function unsetGroup() // ~X2C
221     {
222         array_pop($this->group);
223     }
224     // -X2C
225
226 } // -X2C Class :HIT
227
228 ?>