Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Что должно быть в шаблонизатор?
 
 автор: DEM   (21.11.2009 в 16:19)   письмо автору
 
 

Сейчас пишу свой шаблонизатор. В данный момент он поддерживает фильтры. пару функций. условие IF. Комментарии (удаляются при обработке). Возможность загружать переменные из файла или другого массива (ну или одну переменную). Возможность перевводить ссылки вида www.site.ru в <a href='http://www.site.ru'>www.site.ru</a>. Присваивать в шаблоне переменным значения.

Фильтры - можно написaть {$varname|ToUpper} и он переведёт его в верхний регистр или {$array.varname|color=red} и он отобразить переменую из массива array красным цветом.
Функции - можно написать {#date|m.d.y} и он выведет, что-то вроде, 11.21.09.
Ну, оператор IF (можно написать и ЕСЛИ) понятно как работает, вывести что-то если меременная равна или не равна чему-то.

Сейчас буду делать подключение стороних файлов (или отдельных частей файла) в указаном месте. Цикл FOREACH для вывода массива. Ну и еще пару вещей (сейчас точно не помню что имено хотел).



Что еще должно быть в шаблонизаторе?

ЗЫ. если администрация разрешит, с удовольствием передам этот шаблонизатор на этот сайт.
ЗЗЫ. еще есть возможность отключать использование рег.выражений при компиляции шаблоного сайта и тогда просто будет производится замена переменных типа {$varname} (так как достаточно часто шаблонизатор используется просто для отображение файлов в которых не надо никаких циклов, фильтров, функций и т.д.)

  Ответить  
 
 автор: antf   (21.11.2009 в 17:19)   письмо автору
 
   для: DEM   (21.11.2009 в 16:19)
 

* Очень нужны инклуды как в Смарти: {include file='page.news_comments_list.tpl'}
Позволяют подключать один шаблон в другой. Может понадобится, например, для отделения шаблона постраничной навигации от шаблона конкретной страницы.

* А циклы не будете реализовывать, как section или foreach в Смарти?

* Насколько я помню в Смарти в любой конструкции {if} можно было вставить любую php-функцию:

{if is_array($look_also)}<h2>Смотрите также</h2>{/if}

* Некоторым нужно кэширование.

  Ответить  
 
 автор: DEM   (21.11.2009 в 17:33)   письмо автору
 
   для: antf   (21.11.2009 в 17:19)
 

На счёт кеширования думал - буду делать в последнию очередть.

Про инклюд писал. Сделаю так, что в файлах можно будет установить некоторый код в теги (к примеру {include_this name="name_include"}) и потом можно будет подключать только этот блок.

Вот сейчас делаю foreach, он действительно нужен, сам пользовался довольно часто, а вот что делает section?

Все РНР-функции делать не буду, но самые основные точно.

  Ответить  
 
 автор: antf   (21.11.2009 в 18:11)   письмо автору
 
   для: DEM   (21.11.2009 в 17:33)
 

>Все РНР-функции делать не буду, но самые основные точно.

Smarty скорее всего просто запускает функции php.

> вот что делает section

То же самое, что и цикл FOR.

  Ответить  
 
 автор: DEM   (21.11.2009 в 18:16)   письмо автору
 
   для: antf   (21.11.2009 в 18:11)
 

Ясно. Тогда цикл FOR сделаю после инклюда, а как запускать РНР-функции? Я могу предположить через eval();, но недавно спрашивал, хеопс сказал, что лучше не надо

  Ответить  
 
 автор: antf   (21.11.2009 в 18:36)   письмо автору
 
   для: DEM   (21.11.2009 в 18:16)
 

Насколько я знаю, Smarty преобразовывает код шаблона в php-файл и сохраняет его на диске и обновляет в случае изменений.

  Ответить  
 
 автор: DEM   (21.11.2009 в 19:02)   письмо автору
 
   для: antf   (21.11.2009 в 18:36)
 

Я думаю это не самый лучший способ :) Да и зачем? Я думаю есть не очень много функций которые могут понадобиться дизайнерам.
А Смарти, ИМХО, слишком громоздная фигня, в которой слишком много ненужных функций. Я конечно не дизайнер, но мне надо совсем небольшая толика функций Смарти...

  Ответить  
 
 автор: ols   (23.11.2009 в 08:17)   письмо автору
 
   для: DEM   (21.11.2009 в 19:02)
 

>Я думаю это не самый лучший способ :) Да и зачем? Я думаю есть не очень много функций которые могут понадобиться дизайнерам.
>А Смарти, ИМХО, слишком громоздная фигня, в которой слишком много ненужных функций. Я конечно не дизайнер, но мне надо совсем небольшая толика функций Смарти...

Хоть и не люблю шаблонизаторы, которые сотворены на псевдоязыке, но производительнее Смарти, шаблонизатора я не встречал.

  Ответить  
 
 автор: DEM   (23.11.2009 в 15:04)   письмо автору
 
   для: ols   (23.11.2009 в 08:17)
 

Или я делал что-то не так, или... Но у меня было две страницы.
1-ая - моя. В ней было 10 переменных (с фильтрами), условие IF, инклюдился файл, обработка ссылок, функция date и IP.
2-ая со Смарти. В ней было только 3 переменные.

Мой загрузился почти в два раза быстрее его (постаивл time(); в начале и в конце скроипта)

  Ответить  
 
 автор: Valick   (23.11.2009 в 15:27)   письмо автору
 
   для: DEM   (21.11.2009 в 19:02)
 

А Смарти, ИМХО, слишком громоздная фигня, в которой слишком много ненужных функций
и что? там трансляция происходит один раз при обращении к странице связанной с определенным шаблоном, после чего сохраняется чистый РНР код и при повторном обращении к странице вы получаете уже готовый код (вплоть до смены шаблона или если имеются соответствующие настройки), быстрее и проще этого вы уже не сможете ничего придумать, а если сможете то это будет уже не РНР :)

  Ответить  
 
 автор: Саня   (23.11.2009 в 15:32)   письмо автору
 
   для: DEM   (21.11.2009 в 19:02)
 

> Я думаю это не самый лучший способ :)
Это как раз единственный лучший способ. Нативные шаблоны (если угодно — компилируемые) работают быстрее всего. Если человечество уже давно отказалось от этого подхода (писать php код вместе с html), то от самой идеи нативных шаблонов никто не собирается отказываться. Ведь всё равно в итоге исполняется php-код. Только в вашем случае регулярные выражения будут перемалывать шаблон всегда, а у smarty только один раз.

  Ответить  
 
 автор: DEM   (23.11.2009 в 15:53)   письмо автору
 
   для: Саня   (23.11.2009 в 15:32)
 

Для этого есть кеширование :)

  Ответить  
 
 автор: Саня   (23.11.2009 в 16:22)   письмо автору
 
   для: DEM   (23.11.2009 в 15:53)
 

Кеш придуман для другого.

  Ответить  
 
 автор: Саня   (23.11.2009 в 15:38)   письмо автору
 
   для: DEM   (21.11.2009 в 16:19)
 

Я тоже как-то решил написать свой единственный и неповторимый фреймворк. Но бросил эту затею, когда понял, что вместо "единственного и неповторимого" получается zend framework.

  Ответить  
 
 автор: zavragnov   (23.11.2009 в 16:58)   письмо автору
 
   для: DEM   (21.11.2009 в 16:19)
 

Мне часто требуются вложенные циклы, и вложенные условия.

В почти своем шаблонизаторе (взял за основу вот это http://softtime.ru/forum/read.php?id_forum=1&id_theme=17250, и заточил под себя), мне еще не хватает конструкции switch case, все никак руки не дойдут

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования