<?php
 
/**
 
 * Template-Class
 
 * 
 
 * With this class you can seperate the PHP-source from the design of your
 
 * page. Just include this script and you are able to make objects, that
 
 * contain the design of your page with some placeholder like: {placeholder}
 
 * 
 
 * To fill them just act as follows:
 
 *   // Create the new Object
 
 *   $tpl = new Template("the_template_file.html");
 
 *   // Give the placeholder it's value / content
 
 *   $tpl->placeholder = "Hello World!";
 
 *   
 
 * Remark that you set the value without the initiating and concluding chars,
 
 * that are set in the globals "TEMPLATE_OPEN" and "TEMPLATE_CLOSE".
 
 * 
 
 * You can also fill the placeholder with another template:
 
 *   // Bind a template to the placeholder
 
 *   $tpl->placeholder = new Template("another_template.html");
 
 *   // Access to the new placeholders
 
 *   $tpl->placeholder->placeholer_of_the_other_template = "foo";
 
 *   
 
 * You can repeat this as often / "deep" as you want.
 
 * 
 
 * Since version 1.2.0 you can add PHP-Scripts as an placeholder for your
 
 * template. It's output (after execution) will be set for the placeholders
 
 * value:
 
 *   // Add placeholder "foo" to template
 
 *   $tpl->foo = new Template("script.php");
 
 * 
 
 * This has been added just to enhance the possibilities of this class. To use
 
 * PHP as a placeholder is not the sense of templates!
 
 * 
 
 * ATTENTION : Do NOT use ob_* within the PHP script, which shall be included.
 
 * All PHP scripts are standalone-scripts. So if you want to use a variable from 
 
 * the mainscript you'll have to make it global in the template-script:
 
 *   global $var_name;
 
 * 
 
 *
 
 * LICENSE: This source file is subject to
 
 * "Attribution-Noncommercial-No Derivative Works 3.0 Unported" license
 
 * that is available through the world-wide-web at the following URI:
 
 * http://creativecommons.org/licenses/by-nc-nd/3.0/
 
 * If you did not receive a copy of the license and are unable to
 
 * obtain it through the web, please send a note to [email protected]
 
 * so I can mail you a copy.
 
 * Put this always visible and reachable on your page:
 
 * Template 1.2.1 (c) Pretzlaw
 
 *
 
 * 2009/02/13 - Ralf Mike Pretzlaw
 
 * @category   Template
 
 * @author     Ralf Mike Pretzlaw
 
 * @copyright  Ralf Mike Pretzlaw
 
 * @license    Attribution-Noncommercial-Share Alike 3.0 Unported
 
 * @link       http://creativecommons.org/licenses/by-nc-sa/3.0/
 
 * @version    1.2.0
 
 *
 
*/
 
 
/**
 
 * beginning of each template-variable
 
 * @var string
 
 */
 
define("TEMPLATE_OPEN", "{");
 
/**
 
 * end of each template-variable
 
 * @var string
 
 */
 
define("TEMPLATE_CLOSE", "}");
 
/**
 
 * directory to the templates
 
 * @var string
 
 */
 
define("TEMPLATE_DIR", "templates");
 
/**
 
 * directory to PHP files for templates
 
 * @var string
 
 */
 
define("TEMPLATE_PHP", "php");
 
 
class Template
 
{
 
    /**
 
     * Content of the template
 
     * @var string
 
     */
 
    private $ustContent;
 
    /**
 
     * List of placeholders and their content
 
     * @var array
 
     */
 
    private $mpstVars = array();
 
    
 
    /**
 
     * Constructor - opens template and stores it in object
 
     * @param $File string Filename or content
 
     * @param $IsContent bool Is content given? (default: false)
 
     */
 
    function __construct($File, $IsContent = false)
 
    {
 
        if (!$IsContent)
 
        {
 
            $ext = pathinfo($File, PATHINFO_EXTENSION);
 
            if (stripos($ext, "php") === false)
 
            {
 
                $this->ustContent = file_get_contents(TEMPLATE_DIR . "/" . $File);
 
            }
 
            else
 
            {
 
                ob_start();
 
                include(TEMPLATE_PHP . "/" . $File);
 
                $this->ustContent = ob_get_clean();
 
            }
 
        }
 
        else
 
        {
 
            $this->ustContent = $File;
 
        }
 
    }
 
    
 
    /**
 
     * sets a new placeholder and it's value
 
     * 
 
     * @param $var string
 
     * @param $val string
 
     */
 
    function __set($var, $val)
 
    {
 
        $this->mpstVars[TEMPLATE_OPEN . $var . TEMPLATE_CLOSE] = $val;
 
    }
 
    
 
    /**
 
     * gets a placeholders value
 
     * @param $var string
 
     * @return variant
 
     */
 
    function __get($var)
 
    {
 
        return $this->mpstVars[TEMPLATE_OPEN . $var . TEMPLATE_CLOSE];
 
    }
 
    
 
    /**
 
     * Returns the template with the placeholders replaced by their value
 
     * @return string
 
     */
 
    function __toString()
 
    {
 
        return strtr($this->ustContent, $this->mpstVars);
 
    }
 
    
 
}
 
 
ob_start();
 
 
echo "hallo";
 
 
 
 
$loc = "omotivw!";
 
$temp = new Template("foo.tpl.html");
 
$temp->foo = new Template("bar.php");
 
$temp->foo->here = "there";
 
 
echo $temp;
 
 
?>
 
 |