Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Шаблонизатор
Форумы портала PHP.SU » PHP » Пользовательские функции » Шаблонизатор

Страниц (2): [1] 2 »
 

1. kuller - 24 Ноября, 2011 - 12:27:45 - перейти к сообщению
Написал свой первый шаблонизатор. Жду критики о шаблонизаторе. А вообще меня интересует сойдёт ли такой код или всё таки нужно где та подправить чего?

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. class templates
  5. {
  6.  
  7.          var $dir = './templates/Default/';
  8.          var $vars = array();
  9.          var $template = false;
  10.          public $inc_tpl;
  11.          //-------- Функйия загрузки шаблона --------//
  12.          function load($tpl_name)
  13.          {
  14.                  // проверка на сушествование шаблона
  15.                  if(!file_exists($this->dir.$tpl_name))
  16.                  {
  17.                          exit('Отсуствует файл шаблона: '. $tpl_name);
  18.                          
  19.                  }
  20.                  
  21.                  // загружаем
  22.                  $this->template = file_get_contents($this->dir.$tpl_name);
  23.                  
  24.                  // подключение css
  25.                  preg_match_all('/([a-zA-Z0-9{}\/\-\_]*)\.([a-z]*)/i', $this->template, $arr);
  26.                  if($arr[2][7] == 'css')
  27.                  {
  28.                          foreach($arr[0] as $key => $val)
  29.                          {
  30.                                  $this->template = str_replace('['.$val.']', '<link rel="stylesheet" href="'.$val.'" type="text/css" />', $this->template);
  31.                          }
  32.                  }
  33.                  // подключение js
  34.                  if($arr[2][7] == 'js')
  35.                  {
  36.                          foreach($arr[0] as $key => $val)
  37.                          {
  38.                                  $this->template = str_replace('['.$val.']','<script type="text/javascript" src="'.$val.'"></script>', $this->template);
  39.                          }
  40.                  }
  41.                  // инклудим файл тегом file
  42.                  preg_match_all('/\{file\=(.*?[.tpl])\}/is', $this->template, $inc);
  43.                  foreach($inc[0] as $k => $v)
  44.                  {
  45.                          $this->template = str_replace($inc[0][$k], $this->inc($inc[1][$k]), $this->template);
  46.                  }
  47.                  
  48.                  return true;
  49.          
  50.          }
  51.          
  52.          function set($name, $val)
  53.          {
  54.                  $this->vars[$name] = $val;
  55.          }
  56.          
  57.          function inc($tpl_name)
  58.          {
  59.                  $this->inc_tpl = file_get_contents($this->dir.$tpl_name);
  60.                
  61.                  foreach($this->vars as $k => $v)
  62.                  {
  63.                          $this->inc_tpl = str_replace($k, $v, $this->inc_tpl);
  64.                  }
  65.                  return $this->inc_tpl;
  66.         }
  67.        
  68.          function parse()
  69.      {
  70.          if(count($this->vars) < 1)
  71.                  return false;
  72.  
  73.          foreach($this->vars as $key => $val)
  74.                  {
  75.                          $this->template = str_replace($key,$val, $this->template);
  76.                  }
  77.  
  78.          echo $this->template;
  79.          return true;
  80.      }
  81.  
  82. }
  83.  
  84. $tpl = new templates;
  85.  
  86. ?>
  87.  


вывод
PHP:
скопировать код в буфер обмена
  1.  
  2. //файл шаблона
  3. $tpl->load('main.tpl');
  4. // контент
  5. $tpl->set('{content}','Добро пожаловать');
  6. // тег title
  7. $tpl->set('{title}','Фильмы онлайн');
  8. // путь до дизайна
  9. $tpl->set('{THEME}','/templates/Default');
  10. $tpl->parse();
  11.  
2. Самогонщик - 24 Ноября, 2011 - 13:11:10 - перейти к сообщению
ща будет критика!

1. Будет очень медленно работать если требуется вывести вывести 100 шаблонов в каждый из который нужно забить по 100 параметров.

2. Если нужно вывести дерево, то придётся писать очень весело (угадайте почему)

3. В коде будет водиться очень много хтмл-кода. Не знаю почему, но в шаблонизаторах такого типа так происходит постоянно. Отсюда зависимость кода от шаблона (ахтунг!)

4. Про фичу с подключением скриптов ничего не могу сказать.
3. caballero - 24 Ноября, 2011 - 13:12:49 - перейти к сообщению
Критика: глупо писать вообще какие либо шаблонизаторы потому как PHP сам по себе уже шаблонизатор по своей природе. Он так сделан.
4. Самогонщик - 24 Ноября, 2011 - 13:37:06 - перейти к сообщению
caballero пишет:
PHP сам по себе уже шаблонизатор по своей природе
Ну ты же понимаешь, что это тема для отдельного большого спора не укладывающийся в рамки данной дискуссии?

Личное мнение (Отобразить)
5. DeepVarvar - 24 Ноября, 2011 - 13:49:57 - перейти к сообщению
Самогонщик пишет:
не удобный синтаксис шаблонизации и кое какие другие мелкие недостатки
И какой смысл писать на не самодостаточном языке еще менее самодостаточные обработчики???
6. Мелкий - 24 Ноября, 2011 - 13:57:03 - перейти к сообщению
Народ, с подходом к шаблонизации не холиварим, да. Хотя согласен с caballero и DeepVarvar. Но не холиварим Ниндзя

По коду - если для своих задач подходит, значит имеет место на жизнь.
Но советую определиться со стилем ООП PHP4 (var и функции без указания открытости) и PHP5 (public, private, protected и т.д.).
7. Самогонщик - 24 Ноября, 2011 - 14:02:22 - перейти к сообщению
DeepVarvar пишет:
И какой смысл писать на не самодостаточном языке еще менее самодостаточные обработчики???
Я этого вообще не говорил.
8. DeepVarvar - 24 Ноября, 2011 - 14:19:38 - перейти к сообщению
Самогонщик я просто продолжил мысль Радость
9. caballero - 24 Ноября, 2011 - 15:05:42 - перейти к сообщению
Ну если по теме
то не совсем понятна мысль почему нельзя css и js включиь в файл шаблона
и указать там относительные пути
10. DeepVarvar - 24 Ноября, 2011 - 15:50:25 - перейти к сообщению
И далее по теме: И чем плоха константа вида: <img src="<?=IMG_DIR?>image.jpg" />, а равно такие же для стилей, жабы и пр.. ???
11. Самогонщик - 24 Ноября, 2011 - 16:18:23 - перейти к сообщению
DeepVarvar пишет:
Самогонщик я просто продолжил мысль
Я бы продолжил про другому, но твоё мнение по пхм мне теперь известно.

DeepVarvar пишет:
<img src="<?=IMG_DIR?>image.jpg" />

Привязка к глобальным переменным
12. DlTA - 24 Ноября, 2011 - 16:57:19 - перейти к сообщению
Самогонщик пишет:
<img src="<?=IMG_DIR?>image.jpg" />

Привязка к глобальным переменным

и че плохого?
или фотки надо тоже брать с относительного адреса?
13. Самогонщик - 24 Ноября, 2011 - 17:29:18 - перейти к сообщению
DlTA пишет:
или фотки надо тоже брать с относительного адреса?
Нет, не надо. Особенно если используются поддомены с общими ресурсами.
14. kuller - 24 Ноября, 2011 - 18:14:14 - перейти к сообщению
Самогонщик пишет:
1. Будет очень медленно работать если требуется вывести вывести 100 шаблонов в каждый из который нужно забить по 100 параметров.

2. Если нужно вывести дерево, то придётся писать очень весело (угадайте почему)


100 шаблонов точно не будет. максимум 10-15

а вот насчёт 2го поподробней пожалуста.
15. DeepVarvar - 24 Ноября, 2011 - 18:22:34 - перейти к сообщению
{all_menu_layers} как?

 

Powered by ExBB FM 1.0 RC1