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 » Напишите за меня, пожалуйста » Шаблонизация

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

1. Beholder - 31 Марта, 2009 - 09:50:10 - перейти к сообщению
От Smarty Пришлось отказаться из за его большого веса 90% в него встроенного не требуется.

Нужен простой поиск и замена на подобие скрипта форума phpBB есть идеи но с реализацией туго Недовольство, огорчение

Думаю так прочитать файл потом выдрать из него все попадающие под маску переменные и тупо заменить их видом имя переменной бут в другой переменной и прост заменить ток как это все придумать чет путаюсь блин(((
И эт должно быть отдельным классом. Короче говоря что на это скажете давайте вместе придумывать
2. Stierus - 31 Марта, 2009 - 09:56:40 - перейти к сообщению
str_replace или регулярные выражения, в зависимоти от ТЗ. Улыбка Вцелом неинтересно, если нужно кэширование и прочие навороты - Smarty отлично справляется, если нужно что-то простенькое - сам php - отличный шаблонизатор, никакие классы не нужны, при нормальном проектировании инклудов простых и ob_start хватает слихвой. Вобщем баян.
3. Beholder - 31 Марта, 2009 - 10:00:48 - перейти к сообщению
Так кэширование не нужно однозначн) над попроще чем меньше код выйдет тем лучш) у меня сейчас вообще ужас сделан все шаблоны инклудом а в них статика с подстановкой вида <?=$somevar?>
(Добавление)
Ну так оно и есть))) Прост думаю класс сделать который это одстовлять бует скрипт прост для вапа а там одни лентяи все время чет натворят а так в ооп в этой сфере нета мало кто шарит Улыбка
4. Stierus - 31 Марта, 2009 - 10:09:12 - перейти к сообщению
Ну а кто мешает перед инклудом все входящие сообщения проверить, не натворят ли они чего ?Улыбка (по идее, это первое, что ты должен сделать с приходящим от клиента контентом)
5. Beholder - 31 Марта, 2009 - 10:14:09 - перейти к сообщению
Нет это то понятно просто защититься от горекодеров))))
(Добавление)
Beholder пишет:
Нет это то понятно просто защититься от горекодеров))))
Скрипт то в паблик))) патом начнут переписывать себе присваивать))) а так 95% посмотрит и ничего не поймет остальные пять дядки сырьезные фигней страдать не будут)))
(Добавление)
Спасибо за помощь думаю тема себя изчерпала оставлю как есть с небольшими доработками)))
6. Stierus - 31 Марта, 2009 - 10:25:38 - перейти к сообщению
Так и не поняв замысел автора, для защиты от горе-кодеров. напиши незаменимую функцию ruki_otorvu() - пусть боятся Улыбка
7. Beholder - 31 Марта, 2009 - 10:51:21 - перейти к сообщению
Не испугаются)))
(Добавление)
Просто запутать по принципу умный не спросит дурак не поймет)))
8. Roler - 31 Марта, 2009 - 11:08:29 - перейти к сообщению
Да просто написать самому, там кода то - тьфу)
Я как-то начал писать шаблонизатор(для общего развития), сделал всё, что хотел, кроме циклов.
Вот у меня так заменяется
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $this->file = preg_replace('/\{(.*)\}/','<?=$this->get(\'\1\')?>',$this->file);
  4. ?>
  5.  


Это заменяет переменные вида {VAR} на

Функция get просто возвращает переменную из массива
9. Beholder - 31 Марта, 2009 - 11:13:11 - перейти к сообщению
Roler пишет:
Да просто написать самому, там кода то - тьфу)
Я как-то начал писать шаблонизатор(для общего развития), сделал всё, что хотел, кроме циклов.
Вот у меня так заменяется
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $this->file = preg_replace('/\{(.*)\}/','<?=$this->get(\'\1\')?>',$this->file);
  4. ?>
  5.  


Это заменяет переменные вида {VAR} на

Функция get просто возвращает переменную из массива
Бррр... прост метод создать чтоле с такими действиями и путь к шаблону ему передать?
(Добавление)
эээ чет я запуталсо
10. Stierus - 31 Марта, 2009 - 11:16:01 - перейти к сообщению
Цитата:
эээ чет я запуталсо
Ты же этого и добивался, если я не ошибаюсь Улыбка
11. Roler - 31 Марта, 2009 - 11:21:07 - перейти к сообщению
Ну, если классом, то:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. class template
  4. {
  5. var $content = array();
  6. var $path = 'templates';
  7. var $timelimit = 30;
  8.  
  9.         function set($what,$to)
  10.         {
  11.                 $this->content[$what] = $to;
  12.         }
  13.        
  14.         function get($var)
  15.         {
  16.                 return $this->content[$var];
  17.         }
  18.        
  19.         function load($tpl)
  20.         {
  21.                 if(file_exists("cache/".$tpl.".php") && filemtime("cache/".$tpl.".php")>(time() - $this->timelimit))
  22.                 {
  23.                         include("cache/".$tpl.".php");
  24.                 }
  25.                 else
  26.                 {
  27.                         if(file_exists("$this->path/$tpl.tpl"))
  28.                         {
  29.                                 // Loading template
  30.                                 $this->file = file_get_contents("$this->path/$tpl.tpl");
  31.                                
  32.                                 // Variables
  33.                                 $this->file = preg_replace('/\{(.*)\}/','<?=$this->get(\'\1\')?>',$this->file);
  34.                                
  35.                                 // Writing to cache-file
  36.                                 if($this->incfile = fopen("cache/$tpl.php","w"))
  37.                                 {
  38.                                         fwrite($this->incfile,$this->file);
  39.                                         fclose($this->incfile);
  40.                                 }
  41.                                
  42.                                 // Loading generated file
  43.                                 include("cache/".$tpl.".php");
  44.                         }
  45.  
  46.                 }
  47.         }
  48. }
  49. ?>
  50.  

Работает так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $tpl = new template;
  4.  
  5.         $tpl->set("MSG1","Сообщение один");
  6.         $tpl->set("MSG2","Сообщение два");
  7.        
  8.         $tpl->load("main");
  9. ?>
  10.  

Тут ещё сразу и кэширование сгенерированных шаблонов)
12. Beholder - 31 Марта, 2009 - 11:40:48 - перейти к сообщению
Вот это мне и нужно было изначально просто не мог придумать как переменные записать((( и как их потом переставлять
(Добавление)
Roler превелико благодарен

 

Powered by ExBB FM 1.0 RC1