PHP Classes

File: README.txt

Recommend this page to a friend!
  Classes of Gregory Patmore   TPLManager   README.txt   Download  
File: README.txt
Role: Documentation
Content type: text/plain
Description: About the class and a tutorial
Class: TPLManager
Template engine that uses regular expressions
Author: By
Last change: uploaded a copy
Date: 16 years ago
Size: 8,923 bytes
 

Contents

Class file image Download
Additional Documentation on the TPLManager Class AUTHOR : Gregory Patmore CONTACT : mail a.t gregorypatmore d.o.t c.o.m DESCRIPTION : Lightweight Template Parser --------------------------------------------------------------- NOTES FROM THE AUTHOR: --------------------------------------------------------------- The TPLManager class was written for those who want to leverage the use of templates to manage content but dont want to bog down their application with a whole templating system designed for advanced template processing like Smarty or one of the pear packages. I love using templates to separate the data layers, but I dont want to load a whole new application into my project that I wont use half of. It just seems silly. So TPLManager is a bare bones implementation of the essence of what a template processor does... find spots in the template file and replace them with the crap you give it. Nothing more.. and nothing less. I have written some extentions to this class to provide some more advaced processing features like recursive processing(processing a template reference inside a template), so if you want a copy of that, and cant find it where you got this file from, contact me at mail@gregorypatmore.com. CONCEPT: --------------------------------------------------------------- To provide a no-frills approach to using templates to separate Presentation logic from Application logic. The premise that the TPLManager works on is simple. 1. You give it a path to a template file. 2. It finds all the hotspots embedded in the template file. A Hotspot is a piece of text trapped in braces('{}'). an example of a hotspot would be {MYHOTSPOTNAME}. See the examples below for more info. 3. You give it values to replace the hotspots with. 4. It replaces them. 5. You get the processed text back and do something useful with it(hopefully). --------------------------------------------------------------- FEATURES: --------------------------------------------------------------- Aside from bare bones processing I added a few extra features that I found frequently useful. Results Compacting: By default the TPLManager will leave the original text how it was originally formatted, but you can enable a feature to compact the final processed text to remove extra spaces and returns out of the text before it gets output. You can enable compacting by calling TPLManager::enableCompacting() before processing your template. use TPLManager::disableCompacting() to turn it back off. Constant Checking: By default this feature is disabled, but frequently I have found it convenient to embed the name of a pre-defined constant into a template. Rather then supplying a value each time I want to use it, it's convenient to check the defined constants directly. It should be noted that enabling this feature can expose a vulnerability if not used properly. See the class source documentation for more on that, but for now, just know that you can enable this by calling TPLManager::enableConstChecking() and turn it back off with TPLManager::disableConstChecking() --------------------------------------------------------------- USAGE --------------------------------------------------------------- The main thinga I wanted out of this class were: 1. Ease of use. 2. Minimum amount of code to process a template if you had everything you needed for processing ahead of time. 3. The ability to let the hotspots guide content generation. The reason I like this class is because its simplicity makes it very flexible. There are probably a dozen or more ways to use this class but I mainly use it one of 2 ways. 1. Processing a template with hotspots I know about ahead of time. A. You create a template. B. You format the replacement value array. C. Create a new TPLManager and pass it the value array. D. Retrieve the processed text. 2. Processing a template with unknown hotspots. A. Create a new TPLManager. B. Retrieve the list of hotspots found in the file C. Loop through them and generate an array of replacements. D. Load in the array of replacements and process the template. E. Retrieve the processed text. --------------------------------------------------------------- EXAMPLES --------------------------------------------------------------- LOAD-N-LAUNCH METHOD: Processing a template with hotspots I know about: ('load-n-launch'). Here we have a template with hotspots the application knows about before hand. For our example let's consider processing a simple template to use for sending someone an email message. The template is a file called thanks_email.tpl. The contents of the template file are: _______________________________________________________________ Hi {NAME}, Thanks for checking out my site! If you have any problems Please contact me at {SUPPORTEMAIL}. We look forward to seeing you again, {NAME}. Stop by anytime. Best Regards, {MY_NAME} _______________________________________________________________ Here is the php script to process it. _______________________________________________________________ <?php try{ /* Include the file. */ include('tplmanager.class.php'); /* Create the replacements array */ $repls = array( 'NAME' => 'John Q. Public', 'SUPPORTEMAIL' => 'mail@gregorypatmore.com', 'MY_NAME' => 'Gregory Patmore' ); /* Create a TPLManager and send it the values */ $t = new TPLManager('thanks_email.tpl', $repls); /* Retrieve the processed text */ $procTxt = $t->getParsed(); /* (Do something useful with it here) */ }catch($e){ /* Do something with an error here */ } ?> _______________________________________________________________ CREATE-N-LOOP METHOD I originally wrote it to only work the first way. But then it started to get tedious to write code to create EVERY single tpl. Most of the time I was rewriting the same code over and over to replace common values. So I added some functionality to help me automate common replacements. This class won't fully automate the replacements, but it's a reverse approach from the last method. We will use the template from the last example for this method. Here is the php script to process it. _______________________________________________________________ <?php function getName(){ return 'John Q. Public'; } function getSupportEmail(){ return 'mail@gregorypatmore.com'; } function getMyName(){ return 'Gregory Patmore'; } try{ /* Include the file. */ include('tplmanager.class.php'); /* Create a new instance */ $t = new TPLManager('thanks_email.tpl'); /* Retrieve the hotspot list */ $spots = $t->getHotspotList(); if(is_array($spots)){ /* Loop through and assign a value */ foreach($spots as $s){ switch($s){ case 'NAME' : $t->setVal('NAME', getName()); break; case 'SUPPORTEMAIL' : $t->setVal('SUPPORTEMAIL', getSupportEmail()); break; case 'MY_NAME' : $t->setVal('SUPPORTEMAIL', getMyName()); break; } } /* Retrieve the processed text */ $procTxt = $t->getParsed(); /* (Do something useful with it here) */ }else trigger_error('Template processing failed to find any hotspots to replace', E_USER_WARNING); }catch($e){ /* Do something with an error here */ } ?> _______________________________________________________________ Heres a variation on the CREATE-N-LOOP that I use alot. _______________________________________________________________ <?php function getTPLV_NAME(){ return 'John Q. Public'; } function getTPLV_SUPPORTEMAIL(){ return 'mail@gregorypatmore.com'; } function getTPLV_MY_NAME(){ return 'Gregory Patmore'; } try{ /* Include the file. */ include('tplmanager.class.php'); /* Create a new instance */ $t = new TPLManager('thanks_email.tpl'); /* Retrieve the hotspot list */ $spots = $t->getHotspotList(); if(is_array($spots)){ /* Loop through and assign a value */ foreach($spots as $s){ $func = 'getTPLV_' . strtoupper($s); if(function_exists($func)) $t->setVal($s, $func()); } /* Retrieve the processed text */ $procTxt = $t->getParsed(); /* (Do something useful with it here) */ }else trigger_error('Template processing failed to find any hotspots to replace', E_USER_WARNING); }catch($e){ /* Do something with an error here */ } ?> _______________________________________________________________ It's also worth noting again that you can call TPLManager::enableConstChecking() if you want to consider replacements coming from the currently defined constants. If your the only one developing on the application you can utilize this to set basic template values without the defining the loops or functions as laid out above. ---------------------------------------------------------------