Минимальные требования к шаблонизатору.

С.

Продвинутый новичок
Такие, где нет искусственных ограничений. Сам вопрос о "минимальных требованиях" не имеет смысла. Те задачи, которые окажутся не входящими в перечень "минимальных" не подлежат реализации, что-ли?
 

Alexandre

PHPПенсионер
Сам вопрос о "минимальных требованиях" не имеет смысла
имеет,
если правильно выбраны эти вот, минимальные требования..., то вот таким минимальным набором средств мы можем сконструировать большинство задач.
есть расширенные требования, облегчающие нам жизнь... но без них - можно обойтись. Пример смарти: плагины, поля даты, келбэки ...
все эти фичи малоэффективны и легко заменимы ...
по своей сути - смарти избыточен.

Те задачи, которые окажутся не входящими в перечень "минимальных" не подлежат реализации, что-ли?
они, как раз должны быть реализованны этими минимальными требованиями.

я уже приводил аналогию... шаблоны проектирования. С помощью двух десятков примитивов описывается большинство задач.
судя по твоей логике... если какие-то задачи нельзя вложить в рамки шаблонов - то все шаблоны в карзину?
 

jrip

Новичок
Alexandre
Ваш вопрос всё-таки был слишком абстрактен. Имеем что-то, что в каком-то виде даёт данные шаблонизатору и шиблонизатор по шаблону строит html.. Вот как раз блоки и переменные являются минимальными требованиями, имхо, достаточными для большинства задач.

Если же всё-таки мы хотим реализовывать любую логику в шаблоне, то тут, имхо, нужно очень много всего. А в результате может получится второй PHP...
 

С.

Продвинутый новичок
судя по твоей логике... если какие-то задачи нельзя вложить в рамки шаблонов - то все шаблоны в карзину?
Не все! Только те, в которые нельзя вложить.

Все "красивые" т.н. "блочные" шаблоны, с ограниченными возможностями -- это специализированные шаблоны для конкретных проектов (напр. phpBB). Если имеется в виду шаблон универсального назначения, то ему придется быть "некрасивым".

Сравни например Excel - процессор общего назначения и какую-нибудь специализированную учетную программу. Ясно, что во втором случае работать удобнее, там все "заточено". Но перепрофилирование невозможно. Изобретение универсальной программы с удобствами специализированной -- утопия, равносильная вечному двигателю.
 

syfisher

TDD infected!!
Добавлю свои 2 цента.

Я пока остановился на следующих примитивах:
1) замена поля (переменной)
2) вставка шаблона (инклуд шаблона)
3) условная вставка (IF)
4) циклическая вставка текста с заменой полей (DO/WHILE)
// Теперь более сложные вещи
5) Форматирование и фильтрация при выводе
6) Обворачивание (wrapping), множественный враппинг, условный враппинг
7) Возможность выноса часто используемых логических конструкций в повторно используемые элементы (теги, макросы - как угодно можно это назвать)
8) Возможность миксования php-кода с элементами шаблонизатора.
9) Компиляция, максимально быстрое выполнение откомпилированного шаблона вне зависимости от степени его разбития на составляющие.
10) Минимальные накладные расходы на использование шаблонизатора

P.S. Народ, кто-нибудь из здесь-читающих пробовал MACRO, который предлагал pachanga? Да, да, можете считать это рекламой MACRO ;)
 

syfisher

TDD infected!!
Мы тут подумали и придумали еще один пункт

11) Включение одного шаблона в другой с возможностью вставки определенных частей базововго шаблона в определенные места включаемого :) В большинстве случаев это делают, разбивая включаемый шаблон на составляющие, но это не по пацански ;)
 

Develar

Новичок
>> Включение одного шаблона в другой с возможностью вставки определенных частей базововго шаблона в определенные места включаемого
это типа fetch в blitz?
 

Ноябрь

Новичок
я пока придерживаюсь такой позиции:
1) замена поля (переменной)
2) вставка шаблона (инклуд шаблона)
3) модификаторы представления данных (массивов например), которые также будут на основе шаблонов.
 

Ноябрь

Новичок
Alexandre
предположим $a это массив, и нужно вывести хитрополосатую таблицу.
применяем modif($a), и она выводится.
при этом modif() использует шаблон, содержащий переменные между тегами. Теперь можно изменить хитрополосатую таблицу не задевая код modif().

-~{}~ 11.02.08 04:27:

можно пойти немного дальше и сделать вывод данных на страницу только через модификаторы, например
PHP:
modif($a, array("color:#00DDFF"))
будет выводить
Код:
<div style="color:#00DDFF">значение</div>
, (или что-то более сложное, со стилями, привязанными к css файлу).
тогда в базовом шаблоне может вовсе не быть стилей относящихся к данным, что упростит изменение внешнего вида их отображения.
 

Alexandre

PHPПенсионер
для этого достаточно каждому цвету прописать свой стиль и использовать {IF}

я хочу определить круг именно "минимальных требований",
т.е. того минимума, с помощью которого можно покрыть 95% генераций HTML,
а не "какие именно примочки Вы хотите видеть в новом шаблонизаторе"
 

kode

never knows best
Примочки надо реализовывать с помощью плагинов, а основные требования:
вывод +
http://www.smarty.net/manual/en/language.builtin.functions.php за некоторым исключением
 

syfisher

TDD infected!!
Ноябрь То, что вы указали, легко укладывается в пункт 7) моего списка

"7) Возможность выноса часто используемых логических конструкций в повторно используемые элементы (теги, макросы - как угодно можно это назвать)"
 

Alexandre

PHPПенсионер
Примочки надо реализовывать с помощью плагинов, а основные требования:
вывод +
http://www.smarty.net/manual/en/language.builtin.functions.php за некоторым исключением
{capture}
{config_load}
{foreach},{foreachelse}
{if},{elseif},{else}
{include}
{include_php}
{insert}
{ldelim},{rdelim}
{literal}
{php}
{section},{sectionelse}
{strip}

kode - что будем исключать???
 

kode

never knows best
{config_load}, {insert}, впринципе можно ещё {section},{sectionelse} ну и include_php опционально (реализовать плагином)

capture полезная вещь, но впринципе тоже не особо часто используется. {ldelim},{rdelim} аналогично (обычно literal использую)
 

Alexandre

PHPПенсионер
Автор оригинала: kode
{config_load}, {insert}, впринципе можно ещё {section},{sectionelse} ну и include_php опционально (реализовать плагином)
capture полезная вещь, но впринципе тоже не особо часто используется. {ldelim},{rdelim} аналогично (обычно literal использую)
{capture}
{config_load}
{foreach},{foreachelse}
{if},{elseif},{else}
{include}
{include_php}
{insert}
{ldelim},{rdelim}
{literal}
{php}
{section},{sectionelse}
{strip}
выделенное - это вычеркнутое...
сравним оставшееся с тем - что сказано в первом посте ;)

1) замена поля (переменной)
2) вставка шаблона (инклуд шаблона)
3) условная вставка (IF)
4) циклическая вставка текста с заменой полей (DO/WHILE)
остается {strip} - почти никогда его не использовал ;)

пришел в выводу, что это есть тот минимум строительных кубиков, с помощью которого можно построить большинство шаблонов.
 

kode

never knows best
Я бы такой список оставил:

{foreach},{foreachelse}
{if},{elseif},{else}
{include}
{literal}
{php}
{strip}
 

ONK

Пассивист PHPСluba
Alexandre, поверь наслово, 100% генерации HTML укладывается в функционал состоящий из сиснтаксиса шаблнов (блок + переменые) и простого + удобного интерфейса шаблонизатора, позволяющего достаточно гибко эти блоки компоновать друг с другом в коде контроллера шаблона.
Всё остальное, это промежуточные ступеньки между тем о чём я говорю и полным объединением шаблона с его контроллером, с чем лучше всего справлется сам ПХП.
 
Сверху