Location: PHPKode > scripts > Simple PHP Template Engine > class.template.php
<?php

/**
 * Description of TemplateEngine
 * Date: Friday, 9 Jul 2010,
 * Time: 18:50,
 * This is a simple TemplateEngine that helps you to parse php into html
 * 
 * @author Coa
 */
class Template {

    protected $_templatefolder;
    protected $_extension;
    protected $_template;
    protected $_text;

    /*
      __construct here define Templatefolder and Template extension;
      example: $tpl = new Template('templates','tpl');
      this will look into folder templates which is in that same folder where the file that call loadTemplate;
     */

    public function __construct($templatefolder, $extensiton) {
        $this->_templatefolder = $templatefolder;
        $this->_extension = $extensiton;
    }

    /*
      loadTemplate here set which template to load,
      example: $tpl = new Template('templates','tpl');
      $tpm->loadTemplate('test');
      it will look into folder templates for file called test.tpl, if file doesn't exist,
      it will return an error.
     */

    public function loadTemplate($template) {
        if ($this->_templatefolder == '') {
            if (file_exists($template . '.' . $this->_extension)) {
                $this->_template = $template . '.' . $this->_extension;
            } else {
                echo '<span style="color: red">Template ' . $template . '.' . $this->_extension . ' doesn\'t exist.</span>';
            }
        } else {
            if (file_exists($this->_templatefolder . '/' . $template . '.' . $this->_extension)) {
                $this->_template = $this->_templatefolder . '/' . $template . '.' . $this->_extension;
            } else {
                echo '<span style="color: red">Template ' . $template . '.' . $this->_extension . ' in folder ' . $this->_templatefolder . ' doesn\'t exist.</span>';
            }
        }
        return 1;
    }

    /*
     * Function that opens form with given parameters.
     * example $tpl->openForm('test', '1', 'post', '');
     */

    public function openForm($name, $id, $method, $action) {
        echo '<form method=' . $method . ' action=' . $action . ' name=' . $name . ' id=' . $id . '>';
        return 1;
    }

    /*
     * Function that close form
     *
     */

    public function closeForm() {
        echo '</form>';
        return 1;
    }

    /*
     * Function that make tags with parameters that are given by user
     * example $tpl->addTag(array(
     *              'input_submit' => arrray(
     *                    'input' => array(
     *                          'type' => 'submit',
     *                          'value' => 'register',
     *                          'newline' => '1'
     *                              )
     *                              )
     *              ));
     * it will create now this <input type="submit" name="input_submit" id="input_submit" value="register" /><br />
     * for textarea: $tpl->addTag(array(
     * 'textarea' => array(
     *      'textarea1' => array(
     *          'cols' => 10,
     *          'rows' => 10,
     *          'value' => 'test'
     * )
     * )
     * ));
     * it will create now this <textarea id="textarea1" name="textarea1" cols=10 rows=10>test</textarea>
     * you can create more than one tag by calling only once this function
     * example $tpl->addTag(array(
     *          'input_text' => array(
     *              'input' => array(
     *                  'type' => 'text',
     *                  'value' => 'test',
     *                  'newline' => '1'
     *              )
     *          ),
     *          'text_area1' => array(
     *              'textarea' => array(
     *                  'cols' => 10,
     *                  'rows' => 20,
     *                   'value' => 'test2'
     *              )
     *          )
     *      ));
     * it will create now this
     * <input type="submit" name="input_submit" id="input_submit" value="register" /><br />
     * <textarea id="text_area1" name="text_area1" cols=10 rows=10>test2</textarea>
     */

    public function addTag($infos) {
        foreach ($infos as $key => $value) {
            $new_line = '';
            $show = '';
            $data = '';
            $id = $key;
            foreach ($value as $key => $value) {
                $tag = $key;
                foreach ($value as $key => $value) {
                    if ($key == 'newline' && $value == '1') {
                        $new_line = '<br />';
                    } else if ($key == 'newline') {
                        $data .= '';
                    } else if ($key == 'value') {
                        $show = 'value="' . $value . '"';
                    } else {
                        $data .= $key . '="' . $value . '" ';
                    }
                }
            }
            switch ($tag) {
                case 'textarea':
                    $to_return = '<textarea ' . $data . ' id="' . $id . '" name="' . $id . '" >' . substr($show, 7, -1) . '</textarea>' . $new_line;
                    break;
                default :
                    $to_return = '<' . $tag . ' ' . $data . ' ' . $show . ' id="' . $id . '" name="' . $id . '" />' . $new_line;
            }
            echo $to_return;
        }
        return 0;
    }

    /*
      set here replace the text in tpl file that is loaded,
      example
      test.tpl content:
      [hello]<br />
      [name]<br />
      [time]
      to replace the text write $tmp->set(array(
      'hello' => 'Hello World',
      'name'	=> 'John Smith',
      'time' => date("H:i",time())
      ));
      after this we call for output function
     */

    public function set($replace = array()) {
        $what = array();
        $with = array();
        foreach ($replace as $key => $value) {
            $what[] .= '[' . $key . ']';
            $with[] .= $value;
        }
        $this->_text = str_replace($what, $with, file_get_contents($this->_template));
        return 1;
    }

    /*
      output show html content in this case that we used in set webbrowser will show
      Hello World
      John Smith
      19:05
     */

    public function output() {
        echo $this->_text;
        return 1;
    }

}
?>
Return current item: Simple PHP Template Engine