Пишем простой шаблонизатор (Рейтинг: +8)

Печать RSS
Создаем класс который мы назовем Template
<?php
    class Template {
}
?>
Теперь мы укажем свойства которые нам пригодятся!
<?php
class Template {
    private $_arr = array();
    private $_content;
    public  $template_dir = 'templates/';
}
?>
Теперь мы объявляем метод, который нам позволяет присваивать значения переменным, доступным в шаблоне.
Т.е мы в массив пишем все указанные переменные.
Для чего это нам необходимо увидите ниже =)
<?php
public function __set($var, $name) {
    $this -> _arr[$var] = $name;
}
?>

Следующим шагом у нас будет парсинг.
<?php
private function parsing($tpl) {
    /*
    * Открываем шаблон.
    */
    $this -> _content = file_get_contents($this -> template_dir.$tpl);
    /*
    * И вот теперь можно увидеть для чего нам нужен был метод __set()
    * как видите в свойстве _arr у нас хранится то что нам надо заменить.
    * Теперь мы обрабатываем переменные в шаблоне, такого вида {$name}
    */
    foreach ($this -> _arr as $key => $name) {
        $tpl = str_replace('{$'.$key.'}', $name, $this -> _content);
    }
    return $tpl;
}
?>

Когда у нас все готово, мы пишем метод для вывода шаблона, и сразу обрабатываем его.
<?php
public function display($tpl) {

    /*
    * Проверяем существует ли заданный шаблон или нет.
    */
    if (is_file($this -> template_dir.$tpl)) {

      $this -> _content = parsing($this -> template_dir.$tpl);
       /* 
       * И теперь выводим шаблон
       */
       echo $this -> _content;
       /* 
       * В случае если файла с шаблоном не найдено, выводим ошибку.
       */
    } else {
        echo '<p> Неверный путь к шаблону </p>';
    }
}
?>

Используем шаблон так:
<?php
/* 
* Создаем объект 
*/
$template = new Template;
/* 
* При необходимости указываем категорию с шаблонами.
* По умолчанию стоит категория templates/
*/
$template -> template_dir = 'my_dir/templates/';
/* 
* Указываем какую переменную на что заменить.
*/
$template -> name = 'Hello world =)';
/* 
* Выводим шаблон.
*/
$template -> display('template.tpl');

?>

# Nu3oN
Готовый пример можно скачать тут: Example
Добавил:
Рейтинг: +8
Просмотры: 3775
Комментарии (10) »