Концепции работы шаблонизатора

Rynor

stay hungry
легко
делается метод (можно и изначально) например
getNews(10)
из него данные в
newsList(10)
newsRSS(10)
и т.д.

Грубо говоря, "шаблон" загнан в PHP код :) Это по трудоемкости, возможно, равно аналогичным шаблонам на Smarty, просто мне не нравятся навески над PHP, я предпочитаю "просто" PHP :)
 

mar

Новичок
DonGan
к твоему примеру:
"Если некая переменная $age менне 18, то выделить её красным, иначе - синим"
Можно подсунуть переменную {style} или {color}
В чем некузявость? В том, что $style или $color будут определяться в php? :)
зы мне все-таки больше нравится, когда html сидит в html, а php в php (не формируя там html-строк)

2ALL а вот интересно было бы послушать людей, предпочитающих XSL для шаблонизаторов
 

Rammstein

PHPClub::News
Я наконец понял почему Smarty удобней PHP для версатльщика. По тому, что в PHP чётко задан порядок следования аргументов, поэтому нужно конкретно знать чё за чем идёт. В самрти же это не имеет значение как в HTML. Фактически, запись ключь=значение куда удобней в понимании, чем просто значение.
 

Фанат

oncle terrible
Команда форума
mar
то есть, по-твоему, цвет шрифта определяет не верстальщик, а программер? То есть, html для тебя - это теги. а, скажем, стиль - это уже не Html/ это пхп, наверное.
ню-ню =)

Rammstein
ты, чё-та, не въехал.
какие аргументы в шаблоне? окстись.
вывод переменных и минимум управлющих структур.
вот такой-то, НОРМАЛЬНЫЙ пхп, без аргументов, кому угодно -- верстальщику, программисту, мальчику с улицы - как раз и удобен.
а монстрообразный язык с документацией на 500 страниц - это я уж не понимаю, как у вас язык поворачивается удобным назвать
 

mar

Новичок
Фанат
нет, цвет шрифта можно спокойно отдать верстальщику, высунув ему наружу, скажем, название стиля, или класса (желательно со "говорящим" именем), которое он уже определяет, как хочет. Вообще, я бы сказала иначе,- при любом типе шаблонизатора наверное невозможно соблюсти полную идеологическую чистоту :) - где-то и чем-то приходится жертвовать. Чем и где - каждый определяет для себя сам (как раз при выборе готового шаблонизатора, или идеологии для неготового). Мне проще, даже в индивидуальных проектах складывать html в одном месте, php - в другом. Опыт работы в команде с верстальщиками, показывает, что им это стиль работы вполне удобен (и, кстати, позволяет (в дополнение к cvs или subversion, конечно) не мешать друг другу с одной стороны и не ждать друг друга с другой).

DonGan
2 варианта примера
- в html определяем блок:
Код:
<!-- BEGIN senior_block -->
  <font color="red">{age}</font> 
<!-- BEGIN senior_block -->
<!-- BEGIN junior_block -->
  <font color="blue">{age}</font> 
<!-- BEGIN junior_block -->
в php по условию парсим нужный блок и скрываем ненужный
(так соблюдаем полную чистоту идеологии - ни верстальщик, ни программист не залезают на территорию друг друга :)
И менее идеологически чистый, зато, как водится более простой :) вариант:
Код:
<div class="{age_color}">{age}</div>
в php:
PHP:
  if ($age > 18)
     $t->set_var('age_color', 'senior');
  else 
     $t->set_var('age_color', 'junior');
  $t->set_var('age', $age);
Получаем в итоговом html:
Код:
<div class="senior">19</div>
или
Код:
<div class="junior">11</div>
 

Фанат

oncle terrible
Команда форума
Мне проще, даже в индивидуальных проектах складывать html в одном месте, php - в другом.
ты заблуждаешься.
указывая имя стиля в пхп скрипте, ты кладёшь html и PHP в одном месте.
 

mar

Новичок
Автор оригинала: Фанат
ты заблуждаешься.
указывая имя стиля в пхп скрипте, ты кладёшь html и PHP в одном месте.
ну да, строго говоря, ты прав :) , - я же и говорила о невозможности полностью соблюсти идеологическую чистоту :D Просто дальше вопрос, кому, как и насколько от нее удобно отступать. Я привела пример собственного отступления в узком (идеологически :)) месте.
(Впрочем, полное описание вариантов блоками остается в силе, хотя по мне так тут лучше отступить и сделать, как во втором примере, договорившись с верстальщиком об общем имени класса для css)
 

Фанат

oncle terrible
Команда форума
фигню говоришь.
фиг-ню.
от малого опыта.

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

а в жизни дизайнер придумает разделять джуниоров от сеньоров не цветом, картинками.
и вот в блоке он просто добавит картинку.
а в твоём отступлении ему понадобится твой КОД.
 

diamond_krnl

pure-php
mar, врятли можно предложить чтото лучше, чем:
PHP:
<div class="<?=($age>18? 'senior' : 'junior')?>"><?=$age?></div>
php, в частности "pure-php", позволяет делать всё, и даже больше чем любой из "шаблонизаторов"!
 

Фанат

oncle terrible
Команда форума
diamond_krnl
врядли можно предложить что-то ЧУДОВИЩНЕЕ того кода, который ты здесь привёл

-~{}~ 19.02.06 15:20:

mar
собственно, твоя проблема только в том, что ты никогда не натягивала один и тот же код под совсем новый дизайн, для другого сайта.
после этого все заблуждения про "отступления", моментом выветрятся =)
 

Фанат

oncle terrible
Команда форума
это не эмоции, это факты.
тернарный оператор - это пример как раз ПОЛНОГО непонимания сути шаблона.

Специально для авиадиспетчеров был изобретён так называемы "easy english". Упрощённый язык, главным достоинством которого является минимум слов и их однозначность. специально, чтобы люди лучше понимали друг друга.

шаблон - это средство коммуникации программиста с верстальщиком.
он тоже должен быть МИНИМАЛЕН и ОДНОЗНАЧЕН.
если у тебя уже есть оператор условного перехода, то его и надо использовать ВСЕГДА!
ЕДИНООБРАЗНО.

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

master_x

Pitavale XXI wieku
DonGan
молодец, ты привел еще более убийственную кашу.
у дизайнера должно быть ОТ ПРОГРАММИСТА только ОДНО - переменная $age.
ну как, ну скажи мне как ты тут обойдешься без условного оператора? будь то смарти или чистый php, если сайт у тебя динамический, то есть потребность в использовании условных операторов.
И вообще для смартоголиков, давайте уже забудим про утверждения типа "верстальщик- тупое создание, не может выучить основы php... зато смарти выучит быстро и безболезненно"
 

mar

Новичок
DonGan
ну хочешь оставить сверху значение age - высуни только его и отдай верстальщику возможность извращаться с ним как угодно через DOM+css :)

master_x
DonGan хочет сказать, что место ифа в шаблоне, а не а обрабатывающем шаблон php )

Фанат
Автор оригинала: Фанат
mar
собственно, твоя проблема только в том, что ты никогда не натягивала один и тот же код под совсем новый дизайн, для другого сайта.
после этого все заблуждения про "отступления", моментом выветрятся =)
ну, вообще-то ты прав ), - на PHP я в основном работала с intranet-системами с web-интерфейсом и от дизайна там (при всей иногда сложности интерфейса) оставалось в основном юзабилити и лаконичность - никто не натягивает разные шкуры на, скажем, складские системы :)
Хорошо, вопрос - какие решения (в свете натягивания нового дизайна на имеющийся код) лично ты считаешь оптимальными?
 

Фанат

oncle terrible
Команда форума
mar
никакие.
прошу понять меня правильно.
если бы существовало ЕДИНСТВЕННОЕ оптимальное решение, то ты бы меня не спрашивала - ты бы им давно пользовалась.

слишком велик разброс задач.
сто ль же велик разброс решений.
можно выделить 4 основных варианта шаблонизаторов, обсуждавшихся здесь:
1. чистый пхп
2. смарти
3. XSLT
и четвёртый - отличающийся от первых трёх:
4. XTPL-like - "шаблоны без логики". только вывод переменных и блоки.

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

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

Toxic_Cat

Новичок
А мне больше нравится 4 вариант, XTPL-like, но я его тоже не всегда использую...

Я конечно не настаиваю, но хочу увидеть грамотный пример шаблона на чистом ПХП. Хоть пару строчек.
 

DexizeR

Новичок
Итак.
Предлагаю немного структурировать все подходы к шаблонам.

Следует разделять шаблоны с управляющими структурами и без таковых:

1. Шаблоны с управляющими структурами.
1.1. Компилируемые шаблоны. Для их описания используется некий суб язык. Пример - Smarty.
1.2. Шаблоны с PHP кодом. Тут, думаю, пояснять нечего.

2. Шаблоны без управляющих структур.
2.1. Шаблоны имеющие в своём арсенале два типа данных - динамические блоки и переменные. Пример - FastTemplate.


Теперь проясним ситуацию относительно функциональности, удобства и производительности, точнее говоря их недостатки и преимущества перед друг другом:

Преимущества п.1.2.(шаблоны с PHP кодом):
- Максимально возможный функционал доступный в шаблоне.
- Вся логика представления данных как на ладони.
- Потенциально самый производительный метод.
Недостатки:
- Разделение логики представления и бизнес логики ложится на честное слово программиста/верстальщика.
- Если шаблон составляет верстальщик от и до, то он должен владеть, как минимум, основами языка PHP. В противном случае шаблон выдается верстальщиком в виде п.2.1. а программист его преобразует в вид п.1.2.
- Редактировать шаблон сможет человек знающий PHP(ну или просто достаточно умный человек, способный разобраться что к чему в незнакомой среде).

Преимущества п.1.1.:
- В некоторой степени более легко доступный верстальщику язык управления выводом в шаблоне, чем PHP.
- Потенциальная производительность выше чем в п.2.1., но ниже чем в п.1.2.
- Доступный функционал выше чем в п.2.1., но ниже чем в п.1.2.
- В шаблоне, в расчете на корректное применение, используется исключительно логика представления данных, взаимодействие происходит только с самим скриптом, формирование данных, в котором, остается скрытым(в отличие от п.1.2.).
Недостатки:
- Если шаблон составляет верстальщик от и до, то он должен владеть этим языком(т.е. быть специально обученым).
- Редактировать шаблон сможет человек знающий этот суб язык(ну или просто достаточно умный человек, способный разобраться что к чему в незнакомой среде).
- Этот язык не является стандартом и может с легкостью отличаться от одной реализации к другой.

Преимущества п.2.1.:
- Любая логика в шаблоне отсутствует, что не требует никаких специальных знаний со стороны верстальщика(или любого другого человека).
- Максимально доступный синтаксис для верстальщика, т.е. шаблон(как здесь уже обсуждалось) выступает в роли конфигурационного файла содержего исключительно элементы HTML, что позволяет очень жестко отделить внешнюю оболочку от логики.
Недостатки:
- Потенциально самая низкая производительность.
- Отсутствие любого функционала в шаблоне.


Как можно видеть каждый вариант имеет право на жизнь:
п.1.2. могут использовать те кому важна максимальная производительность, функционал и прозрачная логика представления данных в шаблоне, при этом они готовы пожертвовать удобством верстальщика.

п.1.1. предпочтительно использовать когда верстальщик знаком с применяемой реализацией суб языка, чтобы возложить на него всю ответственность за логику представления данных(самый оптимальный вариант для программистов).

п.2.1. используется в расчете на максимальное удобство людей работающих с шаблонами и самое жесткое отделение любой логики от обертки(HTML в нашем случае).

Лично мы выбираем п.2.1. по причинам описанным выше и не выбираем другие пункты т.к. их недостатки для нас перевешивают их преимущества.

-~{}~ 19.02.06 18:40:

2 Фанат, слишком долго писал свой пост - не заметил твой ответ ,)
 

Фанат

oncle terrible
Команда форума
беда в том, что красивым может быть любой код.
и любой код может быть некрасивым.

ООП считается вещью крутой, как пик Коммунизма.
При этом действительно умеют писать и правильно применять объектный код - единицы.
а остальное - мусор, который от объектности только проигрывает.

Так же и с шаблонами. и вообще со всем, чем угодно.
Всё можно сделать красиво.
Если только не думать, что шаблонная система СДЕЛАЕТ ВСЁ ЗА ТЕБЯ, а делать с умом самому.
 
Сверху