]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MLIB/Tpl/FileDir.php
Se arregla documentación de doxygen y se agrega Doxyfile.
[mecon/meconlib.git] / lib / MLIB / Tpl / FileDir.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                                     mlib
4 -------------------------------------------------------------------------------
5 This file is part of mlib.
6
7 mlib is free software; you can redistribute it and/or modify it under
8 the terms of the GNU Lesser General Public License as published by the Free
9 Software Foundation; either version 2 of the License, or (at your option)
10 any later version.
11
12 mlib is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
15 details.
16  
17 You should have received a copy of the GNU Lesser General Public License; if 
18 not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA  02111-1307  USA
20 -------------------------------------------------------------------------------
21 Created: Wed Jun 17 19:03:14 2003
22 Authors: Leandro Lucarella <luca@lugmen.org.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'MLIB/Tpl.php';
28
29 /**
30  * FileDir is a class based on HIT (Hooks vs IT Template Engine).
31  * Hooks vs IT (HIT) is a simple template implementation, based on hooks and IT 
32  * template systems.
33  *
34  *
35  * @note This class was originally created as a part of BIFE.
36  * @author Leandro Lucarella <luca@llucax.hn.org>
37  * @todo Add a global example and an explanation of the directory structure to
38  *       use, etc.
39  */
40 class MLIB_Tpl_FileDir extends /* implements */ MLIB_Tpl 
41 {
42     /**
43      * Root directory where template files are.
44      */
45     var $root = '.';
46
47     /**
48      * If it's true, it looks for template files in PHP's include_path.
49      */
50     var $useIncludePath = false;
51
52     /**
53      * Group of templates to use.
54      * In this implementation is a subdirectory in $root.
55      *
56      * @protected
57      */
58     var $group = '';
59
60     /**
61      * Constructor.
62      * For PHP4 backward compatibility.
63      *
64      * @copydoc __construct()
65      * @see __construct()
66      */
67     function MLIB_Tpl_FileDir($root = '.', $useIncludePath = false, $group = '')
68     {
69         $this->__construct($root, $useIncludePath, $group);
70     }
71
72     /**
73      * Constructor.
74      *
75      * @param root           Root directory where template files are.
76      * @param useIncludePath If it's true, it looks for template files in
77      *                       PHP's include_path.
78      * @param group          Group of templates to use (a subdirectory in
79      *                       root in this implementation).
80      *
81      * @todo Add an example.
82      */
83     function __construct($root = '.', $useIncludePath = false, $group = '')
84     {
85         $this->root           = $root;
86         $this->useIncludePath = $useIncludePath;
87         $this->pushGroup($group);
88     }
89
90     /**
91      * Parse a template returning the results.
92      * If $vars is an array, the {[keys]} are replaced with [values] ($val is ignored). 
93      * If is a string, {$vars} is replaced with $val.
94      *
95      * @copydoc MLIB_Tpl::parse()
96      * @todo Add an example.
97      */
98     function parse($name, $vars = '', $val = '', $group = null)
99     {
100         $tpl = $this->getFileContent($this->getFilename($name, $group));
101         if ($vars) {
102             if (is_string($vars)) {
103                 $vars = array($vars => $val);
104             }
105             foreach ($vars as $key => $val) {
106                 $keys[] = '{' . $key . '}';
107                 $vals[] = $val;
108             }
109             return str_replace($keys, $vals, $tpl);
110         } else {
111             return $tpl;
112         }
113     }
114
115     function pushGroup($group = '')
116     {
117         $this->group[] = $group;
118     }
119
120     function popGroup()
121     {
122         return array_pop($this->group);
123     }
124
125     function getGroup()
126     {
127         return end($this->group);
128     }
129
130     function exists($name, $group = null)
131     {
132         $tpl = $this->getFileContent($this->getFilename($name, $group));
133         if (!$this->useIncludePath) {
134             return is_readable($file);
135         } else {
136             $include_path = array_unique(preg_split('/[:;]/', ini_get('include_path')));
137             foreach ($include_path as $path) {
138                 if (is_readable("$path/$file")) {
139                     return true;
140                 }
141             }
142             return false;
143         }
144     }
145
146     /**
147      * Returns the template filename.
148      * Returns the template filename based on the $name and the $group of the
149      * template. If $group is null it uses the current group in the groups
150      * stack.
151      *
152      * @param name  Tempate's name.
153      * @param group Group where to look for the template.
154      *
155      * @protected
156      * @return Filename.
157      */
158     function getFilename($name, $group = null)
159     {
160         $group = is_null($group) ? end($this->group) : $group;
161         if ($group) {
162             $file = "{$this->root}/$group/$name.tpl.html";
163         } else {
164             $file = "{$this->root}/$name.tpl.html";
165         }
166         return $file;
167     }
168
169     /**
170      * Returns the contents of a file as a string.
171      * It uses useIncludePath to search (or not) for the file in the PHP's
172      * include_path.
173      *
174      * @param filename Filename.
175      *
176      * @protected
177      * @return File contents as a string.
178      */
179     function getFileContent($filename)
180     {
181         return file_get_contents($filename, $this->useIncludePath);
182     }
183
184 }
185
186 /**
187  * @example Tpl/FileDir/test.php
188  *
189  * This example will create an HTML page with a header, body and a footer.
190  * In order to do this, I will use three template groups (header, body, footer).
191  * All this templates are located in TPLS directory.
192  */
193
194 ?>