Building a Template Parser Class with PHP, Part I - Implementing the class
(Page 5 of 5 )
Before we see how the class is practically implemented, let’s see the complete source code. Here’s the listing:
class templateParser {
var $output;
function templateParser($templateFile='default_template.htm'){
(file_exists($templateFile))?$this-
>output=file_get_contents($templateFile):die
('Error:Template file '.$templateFile.' not found');
}
function parseTemplate($tags=array()){
if(count($tags)>0){
foreach($tags as $tag=>$data){
$data=(file_exists($data))?$this-
>parseFile($data):$data;
$this->output=str_replace
('{'.$tag.'}',$data,$this->output);
}
}
else {
die('Error: No tags were provided for replacement');
}
}
function parseFile($file){
ob_start();
include($file);
$content=ob_get_contents();
ob_end_clean();
return $content;
}
function display(){
return $this->output;
}
}
Finally, here’s a possible real implementation for the class:
<?php
// include the class
require_once('template.php');
// instantiate a new template Parser object
$tp=&new templateParser('template.htm');
// define parameters for the class
$tags=array('title'=>'You are seeing the template parser class in action!','header'=>'header.php','navbar'=>
'navigation bar.php','leftcontent'=>'leftcontent.php',
'maincontent'=>'maincontent.php',
'rightcontent'=>'rightcontent.php',
'footer'=>'footer.php');
// parse template file
$tp->parseTemplate($tags);
// display generated page
echo $tp->display();
?>
The above code is really easy to follow. First, I include the proper class file. Then a new template parser object is instantiated, specifying a "template.htm" file as the template to be parsed.
Please note that I’m instantiating the object with the (&) ampersand operator, which means that I’m working with a reference of the object, not a copy. This is necessary in PHP4 for specifying the behavior when we’re instantiating objects. Fortunately, in PHP 5, the default behavior is working with object references.
Next, I define an array structure containing the parameters to be passed to the class. In the example, I’ve chosen a string for page title, and several PHP files for generating the different sections of the page. As you can see, the class offers the possibility to include dynamic or regular content.
Finally, the object invokes the "parseTemplate()" method, which will replace the placeholders with the real values contained in the "$tags" array. Once the template is processed, the "display()" method is called, displaying the generated page. Here, it becomes clear that instead of directly echoing page contents, we might, for instance, send the page via email. Doing so makes the class much more flexible.
Summary
Are you still with me? Okay, we have finally created a simple but extensible class for parsing template files with no major headaches. What’s more, the code is easily portable to PHP 5 with minor modifications. However, the job is not completely done. In the second part of this article, I’ll add some caching capabilities to the original class, increasing its current functionality. In the meantime, feel free to play around with the code and think about possible improvements. I'll meet you in the second part!
| DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware. |
|
| · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | · | | | | |
|