|
|
|
| Сейчас пишу свой шаблонизатор. В данный момент он поддерживает фильтры. пару функций. условие 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} (так как достаточно часто шаблонизатор используется просто для отображение файлов в которых не надо никаких циклов, фильтров, функций и т.д.) | |
|
|
|
|
|
|
|
для: 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}
* Некоторым нужно кэширование. | |
|
|
|
|
|
|
|
для: antf
(21.11.2009 в 17:19)
| | На счёт кеширования думал - буду делать в последнию очередть.
Про инклюд писал. Сделаю так, что в файлах можно будет установить некоторый код в теги (к примеру {include_this name="name_include"}) и потом можно будет подключать только этот блок.
Вот сейчас делаю foreach, он действительно нужен, сам пользовался довольно часто, а вот что делает section?
Все РНР-функции делать не буду, но самые основные точно. | |
|
|
|
|
|
|
|
для: DEM
(21.11.2009 в 17:33)
| | >Все РНР-функции делать не буду, но самые основные точно.
Smarty скорее всего просто запускает функции php.
> вот что делает section
То же самое, что и цикл FOR. | |
|
|
|
|
|
|
|
для: antf
(21.11.2009 в 18:11)
| | Ясно. Тогда цикл FOR сделаю после инклюда, а как запускать РНР-функции? Я могу предположить через eval();, но недавно спрашивал, хеопс сказал, что лучше не надо | |
|
|
|
|
|
|
|
для: DEM
(21.11.2009 в 18:16)
| | Насколько я знаю, Smarty преобразовывает код шаблона в php-файл и сохраняет его на диске и обновляет в случае изменений. | |
|
|
|
|
|
|
|
для: antf
(21.11.2009 в 18:36)
| | Я думаю это не самый лучший способ :) Да и зачем? Я думаю есть не очень много функций которые могут понадобиться дизайнерам.
А Смарти, ИМХО, слишком громоздная фигня, в которой слишком много ненужных функций. Я конечно не дизайнер, но мне надо совсем небольшая толика функций Смарти... | |
|
|
|
|
|
|
|
для: DEM
(21.11.2009 в 19:02)
| | >Я думаю это не самый лучший способ :) Да и зачем? Я думаю есть не очень много функций которые могут понадобиться дизайнерам.
>А Смарти, ИМХО, слишком громоздная фигня, в которой слишком много ненужных функций. Я конечно не дизайнер, но мне надо совсем небольшая толика функций Смарти...
Хоть и не люблю шаблонизаторы, которые сотворены на псевдоязыке, но производительнее Смарти, шаблонизатора я не встречал. | |
|
|
|
|
|
|
|
для: ols
(23.11.2009 в 08:17)
| | Или я делал что-то не так, или... Но у меня было две страницы.
1-ая - моя. В ней было 10 переменных (с фильтрами), условие IF, инклюдился файл, обработка ссылок, функция date и IP.
2-ая со Смарти. В ней было только 3 переменные.
Мой загрузился почти в два раза быстрее его (постаивл time(); в начале и в конце скроипта) | |
|
|
|
|
|
|
|
для: DEM
(21.11.2009 в 19:02)
| | А Смарти, ИМХО, слишком громоздная фигня, в которой слишком много ненужных функций
и что? там трансляция происходит один раз при обращении к странице связанной с определенным шаблоном, после чего сохраняется чистый РНР код и при повторном обращении к странице вы получаете уже готовый код (вплоть до смены шаблона или если имеются соответствующие настройки), быстрее и проще этого вы уже не сможете ничего придумать, а если сможете то это будет уже не РНР :) | |
|
|
|
|
|
|
|
для: DEM
(21.11.2009 в 19:02)
| | > Я думаю это не самый лучший способ :)
Это как раз единственный лучший способ. Нативные шаблоны (если угодно — компилируемые) работают быстрее всего. Если человечество уже давно отказалось от этого подхода (писать php код вместе с html), то от самой идеи нативных шаблонов никто не собирается отказываться. Ведь всё равно в итоге исполняется php-код. Только в вашем случае регулярные выражения будут перемалывать шаблон всегда, а у smarty только один раз. | |
|
|
|
|
|
|
|
для: Саня
(23.11.2009 в 15:32)
| | Для этого есть кеширование :) | |
|
|
|
|
|
|
|
для: DEM
(23.11.2009 в 15:53)
| | Кеш придуман для другого. | |
|
|
|
|
|
|
|
для: DEM
(21.11.2009 в 16:19)
| | Я тоже как-то решил написать свой единственный и неповторимый фреймворк. Но бросил эту затею, когда понял, что вместо "единственного и неповторимого" получается zend framework. | |
|
|
|
|
|
|
|
для: DEM
(21.11.2009 в 16:19)
| | Мне часто требуются вложенные циклы, и вложенные условия.
В почти своем шаблонизаторе (взял за основу вот это http://softtime.ru/forum/read.php?id_forum=1&id_theme=17250, и заточил под себя), мне еще не хватает конструкции switch case, все никак руки не дойдут | |
|
|
|