[cvs] [Wiki] changed: HordeTemplate

Chuck Hagenbuch chuck at horde.org
Wed Jun 1 23:08:13 PDT 2005


chuck  Wed, 01 Jun 2005 23:08:13 -0700

Modified page: http://wiki.horde.org/HordeTemplate
New Revision:  1.1

@@ -1 +1,231 @@
 
+these are just some basic examples on using Horde Templates... hopefully so
+others won't have to go picking the code apart to figure it out, some are
+obvious, some less so.
+
+The absolute minimum to get in the required functions for Horde_Template to
+work:
+
+   require "Horde/String.php";
+   require "Horde/Util.php";
+   require "Horde/Template.php";
+
+(You're probably better off installing Horde's base.php or core.php, although
+ it will load the whole Horde core, rather than just the templating engine,
+ hence the above gives less of an overhead)
+
+Having set up the tamplate object:
+  $template = &new Horde_Template();
+
+If you want to fetch templates from a different base directory, then specify
+an argument to the "new" call with that base directory.
+
+You can proceed with feeding variables into the object.
+
+Once you're done feeding in variables, you need to get your PHP code to output
+the resulting HTML, which you can do with:
+
+echo $template->fetch($template_file);
+
+If you don't do that, you'll not see any output, except maybe errors ;-)
+
+NB. If you make the PHP script do any output of its own, outside of the
+Horde_Template system, it will appear in the output positioned relative to
+the position of the above fetch() call in the code.
+
+SIMPLE VARIABLES
+----
+PHP:
+//In the php you have a variable like:
+    $foo = 'bar';
+//Set it into your template using:
+    $template->set('foo', $foo);
+
+TEMPLATE:
+<html><body>
+  we have a foo value of <tag:foo />
+</body></html>
+** Note: the <tag:... /> has to be exactly like above, with one space between
+the foo and />. Any other variation and the value will not be parsed. Unparsed
+tags are left in the output in their original form, which shouldn't cause any
+visual distortion of the end result, as it's parsed by browsers as a HTML tag,
+but ignored because the browser doesn't know what it means.
+
+
+ARRAYS
+----
+PHP:
+//our php now builds an array to pass to the templates
+    $foo = array('apples', 'pears', 'peaches');
+//and it is set into the template object
+    $template->set('foo', $foo);
+
+TEMPLATE:
+<html><body>
+  we have many foo values:
+  <loop:foo>
+    <li><tag:foo />
+  </loop:foo>
+</body></html>
+
+** Note: use an loop construct to go through the foo tag and pull out all the
+values of foo. Again the syntax has to be precise or the tags will not get parsed.
+
+ARRAY WITH KEYS
+----
+PHP:
+//We now have an array with keys to pass
+$foo = array('city'     => 'paris',
+             'country'  => 'france',
+             'language' => 'french'
+             );
+//Again it is set the same way into the template object
+    $template->set('foo', $foo);
+
+TEMPLATE:
+<html><body>
+  we have many foo values:
+  <loop:foo>
+    <li><tag:foo.city />, located in <tag:foo.country /> where <tag:foo.language
+/> is spoken
+  </loop:foo>
+</body></html>
+
+** Note: you need to have a loop array to parse through variables with keys.
+using the tags <tag:foo.somekey /> on their own without the loop tag will not work.
+
+
+IF CONDITIONS
+----
+PHP:
+//Set up the php variable, this checks if a user has been authorised
+//the checkUserAuth() function returning a true or false
+    $is_auth = checkUserAuth();
+//Set the 'if' variable into the template object, note the third parameter
+//which is being passed this time - it does nothing more than indicate to
+//the template parser that this is a variable for which an IF condition
+//will be checked. It has nothing to do with the actual value of the variable.
+    $template->set('is_auth', $is_auth, true);
+//And we set up another variable for inclusion inside the if statement
+    $template->set('visitors', countvisits());
+
+TEMPLATE:
+<html><body>
+  welcome to our site...<br />
+  <if:is_auth>
+    today's site statistics are: <tag:visitors /> visitors!
+  </if:is_auth>
+</body></html>
+
+
+** Note: as always the syntax has to be precise, and the part within the
+<if:..></if:..> block will be shown only if $is_auth in the php sets the tag
+value of is_auth to true.
+
+
+IF-ELSE CONDITIONS
+----
+PHP:
+    // the first true is the values set to the variable
+    // the second true indicates it is going to be used in an if statement.
+    $template->set('somename', true, true);
+
+TEMPLATE:
+<html><body>
+  welcome to our site...<br />
+  <if:somename>
+    somename is true
+
+  <else:somename>
+    somename is false
+  </else:somename>
+
+  </if:somename>
+</body></html>
+
+
+** Note: the <else> statement must be enclosed in the <if> block.
+
+
+
+IF CONDITIONS AND ARRAYS
+----
+
+PHP:
+    // the first true is the values set to the variable
+    // the second true indicates it is going to be used in an if statement.
+    $users = array('john', 'peter', 'mary');
+    $template->set('users', $users, true);
+
+TEMPLATE:
+<html><body>
+  welcome to our site...<br />
+  <if:users>
+    Current users:<br/>
+
+    <loop:users>
+        <tag:users /><br/>
+    </loop:users>
+
+  <else:users>
+    There are no users at the moment
+  </else:users>
+
+  </if:users>
+</body></html>
+
+
+** Note: the <else> statement must be enclosed in the <if> block.
+
+
+NESTED LOOPS AND NESTED TAGS
+----
+
+PHP:
+$categories = array('fruit', 'veggie', 'thing');
+$subcats = array('fruit' => array('apple', 'pear'),
+                 'veggie' => array('tomato', 'potato', 'carrot', 'onion'),
+                 'thing' => array('spoon', 'paperbag', 'tool'));
+$template->set('categories', $categories);
+foreach ($categories as $c) {
+    $template->set('subcat_' . $c, $subcats[$c]);
+}
+
+TEMPLATE:
+<table>
+<loop:categories>
+<tr>
+  <td>
+    I have a <tag:categories />. What could it be?
+  </td><td>
+    <ul>
+    <loop:subcat_<tag:categories />>
+      <li><tag:subcat_<tag:categories /> /></li>
+    </loop:subcat_<tag:categories />>
+    </ul>
+  </td>
+</tr>
+</loop:categories>
+</table>
+
+OUTPUT:
+I have a fruit. What could it be?    * apple
+                                     * pear
+
+I have a veggie. What could it be?   * tomato
+                                     * potato
+                                     * carrot
+                                     * onion
+
+I have a thing. What could it be?    * spoon
+                                     * paperbag
+                                     * tool
+
+BACKWARD COMPATIBILITY
+---
+
+It is possible to make Horde_Template backward compatible to some extent with
+other engines, eg. class.FastTemplate.php by modifying the functions getTag
+and getTags with different tag patterns.
+
+This is left as an exercise for the reader.


More information about the cvs mailing list