6810
- 0
- Уровень сложности исполнения: Справочник
вот решил в одну статью собрать все что можно найти на форуме о 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 %}
Можешь почитать и вот эту статейку "Советую обновится с версии 0.9.4 до 0.9.5"
Это тоже интересно
- 07.09.17Форматируем дату на твиге
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.