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

Описание...

  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. if (is_file($this->dir . DIRECTORY_SEPARATOR . $tpl . '.' . $this->ext)) {
  42. include($this->dir . DIRECTORY_SEPARATOR . $tpl . '.' . $this->ext);
  43. } else {
  44. echo '<h1>Tpl debug<h1><pre>' . print_r($data, 1) . '</pre>';
  45. }
  46.  
  47. return ob_get_clean();
  48. }
  49. }

Пример использования
  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>';

  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. if (is_file($this->dir . DIRECTORY_SEPARATOR . $tpl . '.' . $this->ext)) {
  42. include($this->dir . DIRECTORY_SEPARATOR . $tpl . '.' . $this->ext);
  43. } else {
  44. echo '<h1>Tpl debug<h1><pre>' . print_r($data, 1) . '</pre>';
  45. }
  46.  
  47. return ob_get_clean();
  48. }
  49. }

Пример использования
  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>';


  14.01.24 / 13:29 | PHP |   59 | 1   0