Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2011-02-13 14:58:08

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   117 

TWIG - что надо о нём знать для успешного создания шаблонов

Последнее время возникла масса споров относительно использования нового шаблонизатора TWIG.
Постараюсь в этой теме собрать исчерпывающее объяснение причин и научить любого желающего пользоваться TWIG'ом.

Итак, первый вопрос - ЗАЧЕМ?
У существующего шаблонизатора есть несколько серьёзных проблем, а именно:
* работа с шаблонами как с обычным текстом (невозможно отделить переменные от элементов дизайна) - а это значит, что при каждой генерации страницы шаблонизатору приходится выполнять 200-600 символьных замен текста и около 100-200 замен текста при использовании регулярных выражений. итого - низкая производительность
* работа в интерпретирующем режиме - обработка любого шаблона каждый раз требует достаточно много времени
* каскадная обработка переменных - из-за использования функций символьной замены в шаблонизаторе возможны обработки переменных внутри переменных. например, попробуйте в текст новости добавить {mainblock} и можете увидеть (а можете и не получить) сюрприз (зависит от массы факторов)
* отсутствие условных блоков, они заменяются регулярными выражениями (работают медленно, на очень длинных массивах данных возможно катастрофическое падение производительности), возможность отработки только тех условий, которые жестко внесены в код ядра/плагина
* отсутствие циклов, для повторяющихся (даже крайне примитивных) действий требуется создавать новый шаблон

Преимущества TWIG'а:
* компилирующий режим - первая генерация шаблона (после изменения текста шаблона) занимает относительно много времени, но все последующие генерации работают в сотни раз быстрее существующего шаблонизатора
* модульный режим - медленный модуль компиляции (выполняемый редко) и очень быстрый модуль отображения (выполняется при каждом отображении шаблона)
* чёткое разделение текста и переменных в шаблоне - а это значит, что у нас не будет проблем с множественной обработкой шаблона
* наличие условных блоков и возможность создавать сложные условия. главное, чтобы нужные флаги были выставлены в коде ядра/плагине
* наличие циклов - простые повторяющиеся действия можно сделать внутри шаблона

А всёже?
Действительно, полный функционал TWIG'а подавляет - это свой собственный мир, свой язык.
Но... возьмём, к примеру, есть среди нас хоть кто-то, кто использовал более 60% возможностей современного телевизора? Сильно сомневаюсь.
И при этом телевизором пользуются многие... думаю, аналогия ясна.

Практика - отличия для дизайнера
1) Формат переменных.
Старая запись: {variableName}
Новая запись: {{ variableName }}

2) Условные блоки.
Старая запись: [if-logged] тут_текст [/if-logged]
Новая запись: {% if (user.flags.logged) %} тут_текст {% endif %}

3) Простые циклы.
Старая запись:
* основной шаблон: {entries}
* дополнительный шаблон: имя: {name}, записей: {count} <br/>

Новая запись:
{% for entry in entries %}
имя {{ entry.name }}, записей: {{ entry.count }} <br/>
{% endfor %}

4) Отображение блока в случае, если активен конкретный плагин (например, xfields):
Старая запись: [isplugin xfields]...[/isplugin]
Новая запись: {% if pluginIsActive('xfields') %}...{% endif %}

Практика - новые возможности для дизайнера
Благодаря наличию глобальных переменных, появляется возможность использовать некоторую информацию абсолютно во всех шаблонах.
Давайте придумывать примеры:
1. Выводим логин пользователя или слово "гость", если пользователь не залогинен:
Привет, {% if (user.flags.logged) %}<b>{{user.name}}</b>{% else %}гость{% endif %}!

2. Персональный блок для пользователя с логином "vasya":
{% if (user.flags.logged and (user.name == 'vasya')) %} да здравствует Вася!{% endif %}
А теперь - самое важное
Чуть-чуть модифицированный TWIG (а у нас используется именно такой вариант) позволяет полностью сохранить существующие шаблоны сайта!

Достаточно существующего функционана? Продолжаем использовать то что есть.
Хочется что-то новое? Переходим на TWIG, причём только в нужных файлах-шаблонах.
[hr]
Доступные элементы:
* Глобальные переменные:
> lang - глобальный массив с языковыми переменными
> skins_url - URL к каталогу engine/skins/
> admin_url - URL к каталогу engine/

* Функции:
> pluginIsActive(NAME) - возвращает true если данный плагин сейчас активен
Пример: {% if pluginIsActive('xfields') %}Доп. поля включены!{% endif %}

Ваши вопросы/предложения жду в этой теме...

Не в сети

#2 2011-02-13 15:50:19

Knopik
Разработчик
Откуда ufa
Зарегистрирован: 2009-10-14
Сообщений: 350
Рейтинг :   62 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Когда будет переход? или это будет не скоро? или это где то есть, и это можно пощупать?

Изменено Knopik (2011-02-13 16:07:44)

Не в сети

#3 2011-02-13 15:52:13

easmik
VIP забанил этого пользователя.
Зарегистрирован: 2011-02-01
Сообщений: 1,027
Рейтинг :   37 

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Если честно то я не вижу смысл в шаблонизаторах, особенно после работы со Smarty. Но не сколько не против их, если будет возможность и дальше "жить" без них.

Изменено easmik (2011-02-13 15:53:39)

Не в сети

#4 2011-02-13 16:24:40

infinity237
Модератор
Откуда Russia, Moscow
Зарегистрирован: 2008-11-09
Сообщений: 2,674
Рейтинг :   176 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Нужно больше примеров, т.е. скажем default шаблон, который по-максимуму использует TWIG.

Не в сети

#5 2011-02-13 17:51:14

Codwyn
Участник
Зарегистрирован: 2011-01-27
Сообщений: 43
Рейтинг :   

Re: TWIG - что надо о нём знать для успешного создания шаблонов

vitaly, новый раздел форума по twig'y? С вопросами и ответами?

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

Не в сети

#6 2011-02-13 20:07:17

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

easmik пишет:

Если честно то я не вижу смысл в шаблонизаторах, особенно после работы со Smarty. Но не сколько не против их, если будет возможность и дальше "жить" без них.

У нас и так сейчас smarty-подобный шаблонизатор

infinity237 пишет:

Нужно больше примеров, т.е. скажем default шаблон, который по-максимуму использует TWIG.

В SVN есть default шаблон админки. На сайте пока нельзя его использовать. Примеры тут http://twig.kron0s.com/a/02-twig-for-template-designers

Не в сети

#7 2011-02-13 20:52:16

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Почему нельзя) Что мешает самому давить две строчки в core.php чтобы посмотреть работу и не ждать))

Не в сети

#8 2011-02-13 21:17:50

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Официально нельзя, то есть кроме меня им никто не сможет воспользоваться без хаков. Сам я его месяца два назад просмотрел smile

Не в сети

#9 2011-02-14 07:35:18

easmik
VIP забанил этого пользователя.
Зарегистрирован: 2011-02-01
Сообщений: 1,027
Рейтинг :   37 

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Wolverine пишет:

У нас и так сейчас smarty-подобный шаблонизатор

По крайней мере у меня не каких ошибок с NG не возникало. А со Smarty через раз вылезала ошибка и таким же образом исчезала.
Я и выбрал поэтому NG, что все просто и понятно.

Не в сети

#10 2011-02-14 12:57:56

Евгений
Модератор
Откуда Россия
Зарегистрирован: 2009-04-08
Сообщений: 1,014
Рейтинг :   38 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

easmik, ну так поддержка старой системы все равно будет, так что в принципе ничего не меняется)


I NGeneration CMS

Не в сети

#11 2011-02-16 03:57:36

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   117 

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Обновления SVN:
+ Теперь TWIG доступен везде
+ Добавлена функция pluginIsActive
+ Добавлена глобальная переменная handler, ссылка на переменную PHP $CurrentHandler

Теперь функционала достаточно для реализации всех существующих шаблонов на TWIG'е.

Не в сети

#12 2011-02-16 12:57:51

KhadeR
Участник
Зарегистрирован: 2009-09-16
Сообщений: 207
Рейтинг :   17 

Re: TWIG - что надо о нём знать для успешного создания шаблонов

vitaly, а переврд всех файлов сайта и админки на твиг будет, или это будет добровольный переход?


Linkum
В ТОП без фильтров и банов - Оптимизм.

Не в сети

#13 2011-02-16 13:06:30

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

vitaly пишет:

Достаточно существующего функционана? Продолжаем использовать то что есть.
Хочется что-то новое? Переходим на TWIG, причём только в нужных файлах-шаблонах

Не в сети

#14 2012-01-19 14:53:17

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

vitaly пишет:

Ваши вопросы/предложения жду в этой теме...

как прописать условие для конкретной страницы? или хотя бы для конкрутного плагина?
к примеру если я хочу вывести на странице с плагином доп. инфу в шапке, сайдбаре или футере - т.е. за пределами mainblock

в смарти есть такая возможность - надеюсь что должна быть и в твиге
и еще - почему не работает {%  debug %}? было бы удобно отлавливать... в вер. 0.93/880 точно не работает


Проекты любой сложности. Качественно. Дорого.

Не в сети

#15 2012-01-19 14:56:15

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

t3s, переменная handler, которая полностью идентична массиву $CurrentHandler. Одним из элементов которого является pluginName.

Не в сети

#16 2012-01-19 15:33:09

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Wolverine, нифига не понял если честно... гугл говорит что-то про getRequestUri - но ведь это для фреймворка Symfony?

блин, возможно из-за того что у меня в шаблоне вообще не работает твиг - если прописать

{% if pluginIsActive('xfields') %}...{% endif %}

то это же и выводится, хотя долно быть лишь многоточие... как его включить?


Проекты любой сложности. Качественно. Дорого.

Не в сети

#17 2012-01-19 15:53:30

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

t3s пишет:
vitaly пишет:

Ваши вопросы/предложения жду в этой теме...

как прописать условие для конкретной страницы? или хотя бы для конкрутного плагина?
к примеру если я хочу вывести на странице с плагином доп. инфу в шапке, сайдбаре или футере - т.е. за пределами mainblock

$SUPRESS_TEMPLATE_SHOW - флаг, при установке двиг не показывает шаблон, но показывает значение переменной $template[‘vars’][‘mainblock’] (основной блок данных). Требует объявления как глобальный: Требует объявления как глобальный: global $SUPRESS_TEMPLATE_SHOW;

$SUPRESS_MAINBLOCK_SHOW - флаг, при котором двиг не показывает основной блок данных. Установка обоих переменных используется в плагинах, которые полностью генерируют содержимое страницы. К примеру, плагин rss_show. Требует объявления как глобальный: global $SUPRESS_MAINBLOCK_SHOW;

t3s пишет:

то это же и выводится, хотя долно быть лишь многоточие... как его включить?

Использовать можно только в шаблоне к которому подключен твиг...

Не в сети

#18 2012-01-19 16:03:38

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

ммм... а как подключить твиг к шаблону? в "новом" default не обнаружил - плохо искал или он тоже "нетвиганутый"?


Проекты любой сложности. Качественно. Дорого.

Не в сети

#19 2012-01-19 16:36:24

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

// 2. Load & show template
$tpl -> template($mainTemplateName, $mainTemplatePath);
$tpl -> vars($mainTemplateName, $template);
if (!$SUPRESS_TEMPLATE_SHOW) {
	printHTTPheaders();
	echo $tpl -> show($mainTemplateName);
} else if (!$SUPRESS_MAINBLOCK_SHOW) {
	printHTTPheaders();
	echo $template['vars']['mainblock'];
}

Поменять на:

$xt = $twig->loadTemplate($mainTemplatePath.$mainTemplateName.'.tpl');
if (!$SUPRESS_TEMPLATE_SHOW) {
	printHTTPheaders();
	echo $xt->render($tVars);;
} else if (!$SUPRESS_MAINBLOCK_SHOW) {
	printHTTPheaders();
	echo $template['vars']['mainblock'];
}

Но тут тогда придется везде {} менять на {{}} и $template['vars'] менять на $tVars
-----
Или воспользоваться $twigLoader->setConversion чтобы не не изменять {{}}

Изменено ROZARD (2012-01-19 16:48:39)

Не в сети

#20 2012-01-19 18:41:41

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

это в индекс.пхп движка?
получается что оба шаблонизатора одновременно использовать нельзя?
а как же тогда эту фразу понимать?:

Достаточно существующего функционана? Продолжаем использовать то что есть.
Хочется что-то новое? Переходим на TWIG, причём только в нужных файлах-шаблонах.


Проекты любой сложности. Качественно. Дорого.

Не в сети

#21 2012-01-19 19:29:39

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

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

Не в сети

#22 2012-01-20 10:34:08

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

блин, не айс... получается что шаблоны могут быть несовместимыми в пределах одной версии - предвижу появление вопросов в стиле "я вот скачал шаблон для 0.93, а он не работает"


Проекты любой сложности. Качественно. Дорого.

Не в сети

#23 2012-01-20 12:08:46

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

t3s пишет:

получается что шаблоны могут быть несовместимыми"

Не получится. Но всё идет к тому что к концу останется только один шаблонизатор.

Не в сети

#24 2012-01-20 12:20:45

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Могут быть несовместимыми, да. Если все шаблоны были под старый шаблонизатор, потом автор плагина перевел их на новый, в результате чего какие-то файлы объединились в один, какие-то конструкции новые добавились. И те файлы шаблонов для плагина, которые идут  шаблоном уже работать не будут без ручного вмешательства, пусть и не сильно напряжного.

Не в сети

#25 2012-05-11 23:00:12

F_Z_14
Участник
Зарегистрирован: 2012-05-11
Сообщений: 1
Рейтинг :   

Re: TWIG - что надо о нём знать для успешного создания шаблонов

Всем привет!

Подскажите, можно ли передавать анонимные функции в методы Twig?
К примеру, если был написан Extension, в котором определен метод, который принимает анонимную функцию, то есть ли возможность передать туда ее?

Хотелось бы иметь возможность писать что-то вроде лямбда-выражений, как в c#.

Не в сети

Подвал раздела

Работает на FluxBB