Простой нативный шаблонизатор

  1. class Tpl {
  2.  
  3.     private $dir;
  4.  
  5.     private $ext;
  6.  
  7.     public function __construct($dir, $ext) {
  8.         $this->dir = $dir;
  9.         $this->ext = $ext;
  10.     }
  11.  
  12.     public function __call($name, $arguments) {
  13.         $action = substr($name, 0, 3);
  14.         $property = strtolower(substr($name, 3));
  15.         switch ($action) {
  16.             case 'get':
  17.                 return $this->$property;
  18.                 break;
  19.  
  20.             case 'set':
  21.                 $this->$property = $arguments[0];
  22.                 break;
  23.  
  24.             default :
  25.                 return false;
  26.         }
  27.     }
  28.  
  29.     public function args($args) {
  30.         return call_user_func_array(array($this, 'render'), $args);
  31.     }
  32.  
  33.     public function render($tpl, $data = null) {
  34.         if (!is_null($data)) {
  35.             foreach($data as $key => $val) {
  36.                 $k = 'set' . $key;
  37.                 $this->$k($val);
  38.             }
  39.         }
  40.  
  41.         ob_start();
  42.         if (is_file($this->dir . DIRECTORY_SEPARATOR . $tpl . '.' . $this->ext)) {
  43.             include($this->dir . DIRECTORY_SEPARATOR . $tpl . '.' . $this->ext);
  44.         } else {
  45.             echo '<h1>Tpl debug<h1><pre>' . print_r($data, 1) . '</pre>';
  46.         }
  47.  
  48.         return ob_get_clean();        
  49.     }
  50. }
пример
  1. require_once('classes/tpl.php');
  2.  
  3. $tpl = new Tpl('tpl', 'tpl.php');
  4. // задаем папку где будут лежать наши шаблоны и их расширение
  5.  
  6. $names = array('names' => array('Вася', 'Петя', 'Коля'));
  7. $dirs = array('dirs' => array('images', 'cache', 'work'));
  8. $test = array('test' => 'testus');
  9.  
  10. // вариант 1
  11. $array = array_merge($names, $dirs, $test);
  12.  
  13. echo $tpl->render('test', $array);
  14.  
  15. // вариант 2
  16. $tpl->setNames(array('Вася', 'Петя', 'Коля'));
  17. $tpl->setDirs(array('images', 'cache', 'work'));
  18. $tpl->setTest('testus');
  19.  
  20. echo $tpl->render('test');

шаблон
  1. <?php
  2. echo '<h1>test template</h1>';
  3. echo $this->getTest();
  4. echo '<p>Names</p>';
  5. foreach($this->getNames() as $name) {
  6.     echo '<div>' . $name . '</div>';
  7. }
  8.  
  9. echo '<p>Dirs</p>';
  10. foreach($this->getDirs() as $dir) {
  11.     echo '<div>' . $dir . '</div>';
  12. }
  13.  
  14. echo '<h1>Debug</h1>';
  15.  
  16. echo '<pre>' . print_r($this, 1) . '</pre>';

Реклама

Мы в соцсетях

tw tg yt gt