Forums / National / Russian / Шаблонизатор

medar
#9596 2009-03-09 07:19
Та-дааа!!
Я, похоже, таки сделал логику для xtemplate.
Тот путь, который я описал в постах выше оказался тупиковым, пришлось сделать все совсем по-другому.

Файл пока не коммитю, так как даже обсуждения в Ideas не было. Хотя, ИМХО, обсуждать тут нечего, это мастхэв на 100% и дополнительных тормозов оно не создает.

Вообще, когда я увидел ужас, летящий на крыльях ночи в xtemplate в виде массы регулярок и дублирования всех переменных движка, я уже спокойнее отношусь к вопросу "а не затормозит ли это движок?". Не затормозит. Если xtemplate не убил скорость, то точно уже ничего не убьет. :)

Вот измененный файл: http://www.cotonti.com/datas/users/xtemplate.class_45.rar . Им надо переписать существующий (system/xtemplate.class.php). Посмотрите-потестите плиз, я погонял у себя, вроде работает везде и стабильно. Я завтра на свежую голову еще его погоняю и закоммитю.

Использование.

Итак, у нас в шаблонах стала доступна вот такая вот конструкция:
<!-- IF <if_statement> -->
этот текст будет показан если <if_statement> является true
<!-- ENDIF -->

<if_statement> - это логическое php-выражение, только вместо переменных используются tpl-тэги (в том числе и глобальные!)

Примеры:
<!-- IF {PHP.usr.profile.user_name} == "admin" -->
привет, админ !
<!-- ENDIF -->

<!-- IF {PAGE_DESC}== "" -->
Описание страницы пустое. Напишите хоть что-нибудь
<!-- ENDIF -->

<!-- IF {PAGE_DESC} == {PAGE_TITLE} AND {PAGE_COMMENTS_COUNT} > 0-->
Замечена нехилая активность в комментах! И, кстати, тайтл и деск страницы совпадают, если это вам интересно.
<!-- ENDIF -->

и даже можно так:
Пример, конечно, надуманный, но больше в такой поздний час ничего в голову не лезет.
<!-- IF strpos({PAGE_TITLE}, "жуй") -->
{PAGE_TITLE|str_replace('жуй', '', %s)} ц-ц-ц как нехорошо
<!-- ENDIF -->
<!-- IF !strpos({PAGE_TITLE}, "жуй") -->
{PAGE_TITLE}
<!-- ENDIF -->
"|str_replace" - это, кстати, фишка самого xtemplate - можно изменять значения тэгов callback-функциями. Вот как полезно, оказывается, читать документацию. :)

Единственно чего нельзя - делать эти конструкции вложенными. Но так как в выражении можно использовать AND и OR, вложенность и не нужна по сути.
rangjungyeshe.ru