Простой механизм шаблонов PHP, который позволяет использовать выражения PHP вместо изобретения собственного языка

Я ищу простой механизм шаблонов PHP, который позволяет использовать выражения PHP в заменах. «Идеал MVC», согласно которому шаблоны должны содержать только простые замены переменных и ничего больше, часто не дает сбоев, что признают и реагируют на это обычные системы шаблонов, создавая синтаксис «переменных фильтров» (например, вещи после канала в Smarty), по сути, новый язык программирования.

Когда я хочу сделать небольшую постобработку переменных в шаблоне, я хочу написать {strtolower(trim($a))}, а не {$a|strip|lower}, просто потому, что я не хочу запоминать два синтаксиса (и часто два имени) для всего. Я знаю, что этим можно злоупотреблять, но я вполне способен сам придерживаться MVC, мне не нужен язык, чтобы заставить меня это сделать. Это (с использованием выражений на родном языке) совершенно обычное дело, например. в шаблонизаторах Python.

С другой стороны, меня не интересует ответ «PHP». Это слишком многословно (и некрасиво) для шаблонов, даже с альтернативным синтаксисом (for:...endfor;) и <?=. Мне нужен приятный и простой синтаксис для подстановки переменных (выражений), for, if и т. д. На самом деле это может быть очень тонкий слой синтаксического сахара поверх PHP.

Существует ли что-нибудь похожее на приведенное выше описание?


person regnarg    schedule 14.08.2012    source источник
comment
Создайте сценарий, который заменяет { на <?php print( и } на ); ?>. Я имею в виду, что будет причина, по которой движки шаблонов будут изобретать свои собственные языки. Если ф.э. тег внутри {} не начинается с $, как отличить вывод переменной от цикла for? Я действительно думаю, что короткие открытые теги - это то, что вам нужно...   -  person huysentruitw    schedule 14.08.2012
comment
Да, это то, что я думаю сделать в конце: простой препроцессор, возможно, в sed или awk или что-то в этом роде. Как я уже упоминал, такие свойства абсолютно нормальны в мире шаблонов Python и Ruby, поэтому это определенно можно сделать элегантным способом. Люди, работающие с PHP, по какой-то причине, похоже, думают по-другому.   -  person regnarg    schedule 20.08.2012


Ответы (2)


Если вы хотите использовать выражения php в шаблонах, вы можете использовать сокращенный синтаксис php. Если вы хотите пойти по этому пути, я бы посоветовал вам не выбирать систему шаблонов, которая предлагает вам немного синтаксического сахара, поскольку вы потеряете подсказки IDE, такие как подсветка синтаксиса и lint.

Например, если вы хотите повторить переменную, вы можете сделать это:

<h1><?=$name?></h1>
<h2><?=strtolower($name)?></h2>

Для условных выражений:

<?php if(true): ?>
Some markup
<?php endif; ?>

Аналогичный синтаксис можно использовать и для циклов.

Удачного взлома!

person Ifthikhan    schedule 14.08.2012
comment
пожалуйста, НЕ используйте сокращенную запись (<?=$var;?>) по нескольким причинам; 1) он менее читаем, 2) не включается в каждой конфигурации, что разрушит ваш код, если вы его переместите, т.е. на другой сервер, или использовать сниппет на другом сайте и 3) ты действительно такой ленивый...? - person giorgio; 14.08.2012
comment
@giorgio Спасибо за отзыв. Я понимаю ваше беспокойство по поводу отключения сокращенной записи в некоторых конфигурациях. Однако как это влияет на читабельность? Эти обозначения будут использоваться в шаблонах и помогают уменьшить многословие. Ленивый субъективен и вникать в это не будет :) - person Ifthikhan; 14.08.2012
comment
Спасибо, но написать подсветку синтаксиса vim — дело нескольких минут (я могу просто сказать, где я хочу подсветить синтаксис PHP и импортировать существующие правила PHP для этого контекста... очень аккуратно), даже если он еще не существует (для многие системы шаблонов он делает). Что касается других вещей, таких как завершение кода и тому подобное... никогда не использовал их в последние несколько лет, не пропущу. Чистый синтаксис был бы для меня гораздо ценнее. И последнее: дело (в основном) не в лени, а в удобочитаемости. - person regnarg; 14.08.2012
comment
@regnarg Я использую vim в качестве своей IDE, завершение кода — это то, на что я тоже не полагаюсь, но линтинг был очень полезен. - person Ifthikhan; 14.08.2012

Вот ссылка на простой шаблонизатор PHP, который я написал: http://hardcoder.nazuka.net/projects/lint/

person Uchiha Madara    schedule 25.02.2013