Pull to refresh

PHP Шаблонизатор Quicky версия 0.5.x

PHP
Основные изменения по сравнению с 0.4.x: (http://code.google.com/p/quicky/)
[~] {math} теперь компилируется в нативный PHP-код.
[~] Отображаются номера строк при ошибках компиляции, ошибки компиляции выдаются сразу все, а не по одной, показывается тег, в котором ошибка.
[+] Добавлена функция {debug} отображающая debug-консоль (о том почему у Quicky наиболее совершенный дебагер читайте под катом).

[+] локальные переменные
что такое Квики прочитать можно тут:
habrahabr.ru/blogs/php/45337

Коротко о том что такое Quicky:

если у вас стоит Смарти и вас в целом устраивает его идея, но не устраивает его скорость и уродские конструкции, типа math (хотя кого-то прет), то Quicky — то что нужно. практически полная поддержка синтаксиса (шаблоны не придется переписывать, ну или самую малось)

по подробнее теперь о изменениях.

Debug


раньше в квики дебаг был на более низком уровне чем у смарти, но проблема встала и была решена.
{debug} изначально был партирован со смарти, но вскоре стало ясно что он не решает всех проблем.
— Первое и самое важное. Формат вывода ошибок: теперь указывается на какой строке шаблона ошибка четко, а не только строку начала тега
Quicky syntax error Unexpected constant «a» in template extreme/bugreport.tpl on line 3 (starts at line 1)
Tag: {a}
— Второе: партированный дебаг был доработан. Большие блоки текста сворачиваются до [...] и указания длины текста, по нажатию на точки происходит раскрытие всего текстового блока.
— Третье: в режиме debug_mode вы видите на какой строке и в каком файле была зарегистрированна в шаболон переменная (очень полезная фича, особенно при разборе старого кода)
— Четвертое: вывод доступных методов зарегистрированных объектов (не уверен что это сделано уже, но если не сделано, то будет вскорости)
UPD: Хочу по подробнее рассказать про дебаг зарегистрированных объектов. Задача в общем случае такая: зарегистрировать вспомогательный объект в шаблонизаторе и чтоб верстальщик сам теперь с ним мог разобраться. Теперь это возможно. По каждому зарегистрированному объекту есть дебаг публичных свойств, есть дебаг публичных методов с указанием параметров, дефолтных значений параметров и даже DOC /** коментариев к методам/объекту/свойствам.
Итог: на данный момент у Quicky наиболее богатый дебагер из всех виденных мною. Это и отображение DOC и отображение объектов и отображение места регистрации переменных.

Оптимизация


{math equation=«x + y» x=$height y=$width}
не знаю какое у вас отношение к этой конструкции, но теперь вы можете ее использовать не переживая за производительность. Строка будет откомпилирована в выражение а не подвернута пытке через eval
в случае {math equation=$eq ....} будет вызвана пыточная функция как и ранее из регулярок и eval.
тут, конечно, удобнее использовать синтаксис {?$newVar= $a+$b}

Совместимость


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

Локализация переменных


Пожалуй, это так же ключевой момент. Основное отличие Квики от Смарти в том, что Квики использует общее пространство переменных на все шаблоны/подшаблоны. Теперь есть возможность использования локальных переменных.
коротко синтаксис такой:
{local $i = 0} — вводит локальную переменную $i в шаблон
{global $i} — возращает указатель $i на глобальную переменную $i
{import $i} — импортирует переменную $i из глобального пространства в локальное, тоесть в локальном пространстве появляется перменная $i инициированная значением global $i

{declare name='depart_scopes'} — эта строка перенаправляет все обращения к локальным переменным
{declare name='depart_scopes' value=0} — эта строка перенаправляет все обращения к глобальным переменным

на практике это означает что теперь вы можете писать нечто вроде:
{$info} - выведет объявленное значение.
 {declare name='depart_scopes'}
     ТУТ код, в котором вы можете использовать переменные не боясь перекрыть глобальные значения 
	 {if isset($quicky.request.a)}{?$a = true}{/if} - переменная $a локальна.
	 если нужно использовать глобальные переменные, то их нужно импортировать
	 {import $info}
	 {$info} - вывели перменную $info
	 {?$info = "new"} мы затерли локальную переменную ($info = {$info}), но глобальная $info осталась как была
 {declare name='depart_scopes' value=0}
 {$info} - выведет прежнее значение.
 
Tags:phpquickytemplatetemplate enginetemplaterperformance
Hubs: PHP
Total votes 3: ↑3 and ↓0 +3
Views1.7K

Popular right now