вот решил в одну статью собрать все что можно найти на форуме о TWIGе и с TWIGом
это про блоки с использованием твига
1. Блок только на главной
при условии что у вас на главной новости
Код:
{% if isHandler('news:main') %}
только на главной
{% endif %}
при условии что у вас на главной новости
Код:
{% if not isHandler('news:main') %}
всюду, кроме главной
{% endif %}
Код:
{% if isHandler('news:by.category') %}
на всех страничках категориий
{% endif %}
Код:
{% if isHandler('news:news') %}
на всех страничках с полными новостями
{% endif %}
Код:
{% if isCategory('some_cat') %}
Блок на страничке со списком новостей из категории some_cat
{% endif %}
Код:
{% if not isCategory('some_cat') %}
Блок не показывается на страничке со списком новостей из категории some_cat
{% endif %}
Код:
{% if not isHandler('tags') %}
Блок показывать всюду кроме определенного плагина (tags)
{% endif %}
Код:
{% if isHandler('news:news') and handler.params.altname == 'altname_novosti' %}
блок на страничке новости с альтнеймом = altname_novosti
{% endif %}
Код:
{% if isHandler('search') %}
Блок только на страничках поиска
{% endif %}
(как я понял, новости в опр промежуток времени)
Код:
{% if isHandler('news:by.year') %}
новости за год
{% endif %}
Код:
{% if isHandler('news:by.month') %}
новости за месяц
{% endif %}
Код:
{% if isHandler('news:by.day') %}
новости в за день
{% endif %}
Код:
{% if isHandler('news:by.year|news:by.month') %}
новости за год или за месяц
{% endif %}
Код:
{% if isHandler('news:by.year|news:by.day') %}
новости за год или за день
{% endif %}
Код:
{% if isHandler('news:by.month|news:by.day') %}
новости за месяц или за день
{% endif %}
Код:
{% if isHandler('news:by.year|news:by.month|news:by.day') %}
новости за год или за месяц или за день
{% endif %}
Код:
{% if isHandler('core:login') %}
на странице входа
{% endif %}
Код:
{% if isHandler('core:registration') %}
на странице рег
{% endif %}
Код:
{% if isHandler('core:lostpassword') %}
на странице востановления пасса
{% endif %}
Код:
Код:
{% if isHandler('tags') %}
на странице тегов
{% endif %}
Код:
Код:
{% if isHandler('uprofile:show') %}
только на страничке профиля
{% endif %}
Код:
{% if isHandler('uprofile:edit') %}
только на страничке редактированния профиля
{% endif %}
Код:
Код:
{% if isHandler('static') %}
только на статике
{% endif %}
Код:
Код:
{% if not isHandler('static') %}
кроме статики
{% endif %}
Код:
Код:
{% if not isSet(handler) %}
На странице с ошибкой 404
{% endif %}
конструкция для определенной новости
Код:
[TWIG]
{% if isHandler('news:uslugi') and handler.params.altname == 'uchet-teplovoi-energii' %}<strong>{% endif %}
Учет тепловой энергии
{% if isHandler('news:uslugi') and handler.params.altname == 'uchet-teplovoi-energii' %}</strong>{% endif %}
[/TWIG]
Код:
{% if isHandler('news') and handler.params.category == 'blog' %}
Я в категории блог, и на страничке полной новости с категорией блог
{% endif %}
описание isHandler() из доков
isHandler($rule) - возвращает true в случае, если текущее местоположение пользователя соотвествует указанным правилам в isHandler($rule) - возвращает true в случае, если текущее местоположение пользователя соотвествует указанным правилам в $rule
- Формат переменной $rule: Правило1[|Правило2[|Правило3[...]]]
- Формат записи ПравилоN: PLUGIN[:HANDLER]
где:
PLUGIN - ID плагина (можно посмотреть в админке, на странице Управление форматом ссылок, колонка Плагин)
HANDLER - ID обработчика (если указан, колонка Действие)
Код:
Код:
{% if isHandler('tags|news:main') %}
* Пользователь находится на главной странице или на странице плагина tags *
{% endif %}
Как вывести блок (в категории и в новостях) для нескольких категорий? К примеру для категорий info и docs
Код:
{% if isHandler('news') and (handler.params.category == 'info' or handler.params.category == 'docs') %}
Я в категории info и docs, и на страничке полной новости с категорией info
{% endif %}
Код:
{% if isCategory('info, docs') %}Я в одной из категорий: info, docs. А если точнее, то я в: {{ isCategory(':alt') }}{% endif %}
функции isCategory категории указываются через запятую.
Код:
{% if isCategory('blogosfera, web-development, thoughts, internet, politics, hardware, foto, soft') %}
[plugin_tags}
{% endif %}
при выводе /all/ используется шаблон news.table.tpl
Код:
{% if isHandler('news:all') %} -- блок ALL -- {% endif %}
Код:
[twig]
{% if isHandler('news:by.category') %}
<!-- Обработчик - пользователь находится в какой-то из категорий -->
{% if (isCategory('football, hockey') and isSet(handler.params.page) and (handler.params.page < 2)) %}
<!-- не показываем: пользователь в категориях football, hockey на 1й странице -->
{% else %}
<!-- показываем -->
{% endif %}
[/twig]
В SVN версии есть возможность вывода приложенных файлов в своём собственном шаблоне с использованием возможностей шаблонизатора TWIG.
В news.short.tpl / news.full.tpl доступны переменные _images и _files - в них живут все приложенные к новости картинки/файлы (причём вне зависимости от плагина, который эти картинки/файлы прикрепил).
Пример содержимого массива _files:
Код:
array (
0 =>
array (
'plugin' => '',
'pidentity' => '',
'url' => 'http://engine.ngcms.ru/uploads/dsn/0a/8a/001/jd-gui-0.3.3.windows.zip',
'name' => 'jd-gui-0.3.3.windows.zip',
'origName' => 'jd-gui-0.3.3.windows.zip',
'description' => '',
),
)
1. Как посмотреть содержимое этих массивов (для отладки и понимания) - при помощи TWIG функции debugValue():
Код:
[TWIG]Прикрепленные файлы: {{ debugValue(_files) }}<br/>
Прикрепленные картинки: {{ debugValue(_images) }}[/TWIG]
Если поле 'plugin' пустое, то файл прикреплён напрямую к новости, если заполнено, то там стоит ID прикрепившего файл плагина.
3. Как вывести список прикрепленных файлов, считая что плагины файлы прикладывать не могут:
Код:
К новости прикреплены следующие файлы:
{% for file in _files %}
* <a href="{{ file.url }}">{{ file.origName }}</a><br/>
{% endfor %}
Выводим логин пользователя или слово "гость", если пользователь не залогинен:
Код:
Привет, {% if (global.flags.isLogged) %}<b>{{global.user.name}}</b>{% else %}гость{% endif %}
настройка блока xnews с выводом в main.tpl вывод последних новостей
Код:
{{ callPlugin('xnews.show', {'order' : 'last', 'categories' : '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15', 'count': '5', 'template' : 'xnews1'}) }}
вывод последних новостей по дате, по отношению к опубликованной новости
Код:
[TWIG]{{ callPlugin('xnews.show', { 'id': 'mainnews'}) }}[/TWIG]
разный фон в разных категориях
Код:
<body [TWIG]{% if isCategory('category1') %}
style="background-color: black;"
{% endif %}
{% if isCategory('category2') %}
style="background-color: orange;"
{% endif %}
[/TWIG] >
Иконку категории
Код:
[TWIG]{% if (isHandler('news:news')) %}
{% if category.icon.purl %}<img src="{{ category.icon.purl }}"/><br/>{% endif %}
{% endif %}[/TWIG]
А можно ли сделать так чтобы в main.tpl был блок категорий а в полной новости вместо блока категорий отображался блок с рекламами ?
Код:
[TWIG]
{% if isHandler('news:main') %}
{categories}
{% endif %}
{% if isHandler('news:by.category') %}
{блок рекламы, например через ads_pro}
{% endif %}
[/TWIG]
рактика - отличия для дизайнера
1) Формат переменных.
Старая запись:
Код:
{variableName}
Код:
{{ variableName }}
2) Условные блоки.
Старая запись:
Код:
[if-logged] тут_текст [/if-logged]
Код:
{% if (user.flags.logged) %} тут_текст {% endif %}
3) Простые циклы.
Старая запись:
* основной шаблон:
Код:
{entries}
Код:
{name}
Код:
{count}
Новая запись:
Код:
{% 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, причём только в нужных файлах-шаблонах.
Доступные элементы:
* Глобальные переменные:
> lang - глобальный массив с языковыми переменными
> skins_url - URL к каталогу engine/skins/
> admin_url - URL к каталогу engine/
* Функции:
> pluginIsActive(NAME) - возвращает true если данный плагин сейчас активен
Пример:
Код:
{% if pluginIsActive('xfields') %}Доп. поля включены!{% endif %}
менюшка
Код:
{% for entry in entries %}
<!-- Если не стоит флаг `flags.active`, т.е. если эта категория - не текущая, то показываем ссылку --> <!-- В текущей категории показываем имя категории жирным шрифтом -->
<li> {% if (not entry.flags.active) %} <a href="{{ entry.link }}"> {% else %} <b> {% endif %} {{ entry.cat }} {% if (entry.flags.active) %} </a> {% else %} </b> {% endif %}
<!-- Отображаем кол-во новостей в категории только в случае, если выставлен флаг `flags.counter` -->
{% if (entry.flags.counter) %} [{{ entry.counter }}] {% endif %} <!-- Если у категории есть подкатегории, то открываем новый уровень вложенности --> {% if (entry.flags.hasChildren) %} <ul style="list-style:none;"> {% else %} </li> <!-- Если после этой категории закрывается 1 или несколько уровней - выводим закрывающиеся </ul> --> {% for i in entry.flags.closeToLevel .. entry.flags.level %} </ul></li> {% endfor %} {% endif %} {% endfor %}
это должно быть прописанно в news.categories.tpl
скрыть ссылку от всех кроме админов
Код:
{% if (global.user.status == 1) %}
hey admin!
{% endif %}
Блок на страничке ПОЛНОЙ новости с главной категорией soft
Код:
{% if (news.categories.list[0]['alt'] == 'soft') %}
Блок на страничке ПОЛНОЙ новости с главной категорией soft
{% endif %}
Можешь почитать и вот эту статейку "FerroMenu JQuery плагин"

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.