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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Шаблонизатор

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
kuller
Отправлено: 24 Ноября, 2011 - 12:27:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




Написал свой первый шаблонизатор. Жду критики о шаблонизаторе. А вообще меня интересует сойдёт ли такой код или всё таки нужно где та подправить чего?

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.  
 
 Top
Самогонщик
Отправлено: 24 Ноября, 2011 - 13:11:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




ща будет критика!

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

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

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

4. Про фичу с подключением скриптов ничего не могу сказать.
 
 Top
caballero
Отправлено: 24 Ноября, 2011 - 13:12:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Критика: глупо писать вообще какие либо шаблонизаторы потому как PHP сам по себе уже шаблонизатор по своей природе. Он так сделан.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Самогонщик
Отправлено: 24 Ноября, 2011 - 13:37:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




caballero пишет:
PHP сам по себе уже шаблонизатор по своей природе
Ну ты же понимаешь, что это тема для отдельного большого спора не укладывающийся в рамки данной дискуссии?

Личное мнение (Отобразить)
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2011 - 13:49:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Самогонщик пишет:
не удобный синтаксис шаблонизации и кое какие другие мелкие недостатки
И какой смысл писать на не самодостаточном языке еще менее самодостаточные обработчики???
 
 Top
Мелкий Супермодератор
Отправлено: 24 Ноября, 2011 - 13:57:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Народ, с подходом к шаблонизации не холиварим, да. Хотя согласен с caballero и DeepVarvar. Но не холиварим Ниндзя

По коду - если для своих задач подходит, значит имеет место на жизнь.
Но советую определиться со стилем ООП PHP4 (var и функции без указания открытости) и PHP5 (public, private, protected и т.д.).


-----
PostgreSQL DBA
 
 Top
Самогонщик
Отправлено: 24 Ноября, 2011 - 14:02:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




DeepVarvar пишет:
И какой смысл писать на не самодостаточном языке еще менее самодостаточные обработчики???
Я этого вообще не говорил.
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2011 - 14:19:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Самогонщик я просто продолжил мысль Радость
 
 Top
caballero
Отправлено: 24 Ноября, 2011 - 15:05:42
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Ну если по теме
то не совсем понятна мысль почему нельзя css и js включиь в файл шаблона
и указать там относительные пути


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2011 - 15:50:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




И далее по теме: И чем плоха константа вида: <img src="<?=IMG_DIR?>image.jpg" />, а равно такие же для стилей, жабы и пр.. ???
 
 Top
Самогонщик
Отправлено: 24 Ноября, 2011 - 16:18:23
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




DeepVarvar пишет:
Самогонщик я просто продолжил мысль
Я бы продолжил про другому, но твоё мнение по пхм мне теперь известно.

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

Привязка к глобальным переменным
 
 Top
DlTA
Отправлено: 24 Ноября, 2011 - 16:57:19
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Самогонщик пишет:
<img src="<?=IMG_DIR?>image.jpg" />

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

и че плохого?
или фотки надо тоже брать с относительного адреса?
 
 Top
Самогонщик
Отправлено: 24 Ноября, 2011 - 17:29:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




DlTA пишет:
или фотки надо тоже брать с относительного адреса?
Нет, не надо. Особенно если используются поддомены с общими ресурсами.
 
 Top
kuller
Отправлено: 24 Ноября, 2011 - 18:14:14
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




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

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


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

а вот насчёт 2го поподробней пожалуста.
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Ноября, 2011 - 18:22:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




{all_menu_layers} как?

(Отредактировано автором: 24 Ноября, 2011 - 18:23:24)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB