Introduction

Introduction – Creating and Parsing templates

Templates

A template consists of text and special labeled blocks and placeholders. The content of blocks can be re-used and parsed multiple times with different placeholder values.

A typical template

<html>
 <body>
  Userlist
  <table>
<!-- BEGIN row -->
   <tr>
    <td>{USERNAME}</td>
    <td>{EMAIL}</td>
   </tr>
<!-- END row -->
  </table>
 </body>
</html>

Placeholder

Placeholders can be defined in templates and are filled from PHP code with content. The format of placeholder up to version (1.1.x) is

{[0-9A-Za-z_-]+}

Since version 1.2.x dots are allowed, too.

{[\.0-9A-Za-z_-]+}

This means, the name of the placeholder can consist of upper- and lowercase letters, underscores and hypens. The name must be placed between curly brackets without any spaces. Valid names are i.e.:

  • {Placeholder}
  • {place2_holder}
  • {PLACEHOLDER1}
  • {Place-Holder}

Valid names since version 1.2.x

  • {Place.Holder}

Non-valid names are i.e.

  • { Placeholder 3 } (spaces)
  • {place*holder} (char isn't permitted)

Blocks

The format of a block is


<!-- BEGIN [0-9A-Za-z_-]+ -->
... block content ...
<!-- END [0-9A-Za-z_-]+ -->

Since version 1.2.x dots are allowed in block definitions


<!-- BEGIN [\.0-9A-Za-z_-]+ -->
... block content ...
<!-- END [\.0-9A-Za-z_-]+ -->

The rules for the block name are the same like for placeholders. In contrast to placeholders the spaces in the block markup are required.

The nesting of blocks is permitted, but be careful while parsing. You have to set and parse the deepest inner block first and then set and parse from inner to outer.

In IT the whole template file itself is nested in a meta block called "__global__". Most block-related functions use this block name as default.

Usage Example

The template


<html> 
 <table border> 
<!-- BEGIN row --> 
  <tr>
<!-- BEGIN cell -->  
   <td>
    {DATA}
   </td>
<!-- END cell -->  
  </tr>
<!-- END row --> 
 </table> 
</html>

The script

<?php
  
require_once "HTML/Template/IT.php";

  
$data = array
  (
    
"0" => array("Stig""Bakken"),
    
"1" => array("Martin""Jansen"),
    
"2" => array("Alexander""Merz")
  );

  
$tpl = new HTML_Template_IT("./templates");

  
$tpl->loadTemplatefile("main.tpl.htm"truetrue);

  foreach(
$data as $name) {
    foreach(
$name as $cell) {
        
// Assign data to the inner block
        
$tpl->setCurrentBlock("cell") ;
        
$tpl->setVariable("DATA"$cell) ;
        
$tpl->parseCurrentBlock("cell") ;
    }

     
// parse outter block
     
$tpl->parse("row");
  }
  
// print the output
  
$tpl->show();

?>

The output

   
<html>
 <table border>
  <tr>
   <td>
    Stig
   </td>
   <td>
    Bakken
   </td>
  </tr>
  <tr>
   <td>
    Martin
   </td>
   <td>
    Jansen
   </td>
  </tr>
  <tr>
   <td>
    Alexander
   </td>
   <td>
    Merz
   </td>
  </tr>
 </table>
</html>