| |
|
|
| | Назрела необходимость прикрутить такую возможность к шаблонизатору.
Подглядел синтаксис у смарти:
{if $name eq "Fred"}
Welcome Sir.
{elseif $name eq "Wilma"}
Welcome Ma'am.
{else}
Welcome, whatever you are.
{/if}
|
судя по всему, выражение парсится, так как там куча собственных возможностей сравнения. Но обратил внимание что можно использовать функции php:
Получается, что в этом случае они просто прогоняют выражение через eval?
Возникает вопрос: есть ли вообще смысл парсить выражение в шаблоне? или просто брать его оттуда и, в зависимости от значения возвращенного eval действовать дальше. Кто делал, или хотябы сталкивался близко - подскажите! А то смущает меня такой подход... | |
| |
|
|
| |
|
|
| |
для: Loki
(06.06.2006 в 14:07)
| | | может будет полезно:
альтернатива if...else | |
| |
|
|
| |
|
|
| |
для: P@Sol
(06.06.2006 в 14:27)
| | | Не... этот вариант не спортивный:) слишком много частей получается... | |
| |
|
|
| |
|
|
| |
для: Loki
(06.06.2006 в 14:07)
| | | а зачем eval?
smarty компилирует php файл, который потом будет выполняться | |
| |
|
|
| |
|
|
| |
для: isset
(06.06.2006 в 14:35)
| | | Ну я же не смарти пишу:)
Нв самом деле, если я и буду делать кэширование, то скорее всего статического html. Но это в отдаленном будущем, а пока хочу несколько увеличить гибкость системы. | |
| |
|
|
| |
|
|
| |
для: Loki
(06.06.2006 в 14:07)
| | | Лучше парсер на PHP не писать - слишком накладно получится, мне вариант с eval больше нравится (даже не смотря на то, что искать ошибки в нём гораздо сложнее). | |
| |
|
|
| |
|
|
| |
для: cheops
(06.06.2006 в 19:43)
| | | Сделал... правда, попутно возник вопрос об области видимости переменных... но этоя решил, хоть и немного коряво.
Вообще, серьезно задумался о синтаксисе и порядке обработки шаблона. Сейчас обрабатывается так:
находятся и обрабатываются все инклуды
находятся все циклы и передаются на обработку предназначенным для них функциям
обрабатываются все условия.
|
то есть получается, что шнклуд не может быть внутри цикла или условия... точнее может, но его обработка и замена произойдет раньше всего... в общем-то подобные ограничения не сильно ограничивают возможности, но как-то подобное положение вещей меня несколько смущает... может как как-то регулярные выражения неправильно составил?:) | |
| |
|
|