Хаки и Скрипты Next Generation CMS
irbees2008 irbees2008 Опубликовано - 8 - апреля TWIG
6586 - 0
  • Уровень сложности исполнения: Справочник

вот решил в одну статью собрать все что можно найти на форуме о TWIGе и с TWIGом
это про блоки с использованием твига



1. Блок только на главной
при условии что у вас на главной новости
Код:
{% if isHandler('news:main') %}
только на главной
{% endif %}
2. Блок всюду кроме главной
при условии что у вас на главной новости
Код:
{% if not isHandler('news:main') %}
всюду, кроме главной
{% endif %}
3. Блок только на страничках категорий
Код:
{% if isHandler('news:by.category') %}
на всех страничках категориий
{% endif %}
4. Блок только на страничках полных новостей
Код:
{% if isHandler('news:news') %}
на всех страничках с полными новостями
{% endif %}
5. Блок только на страничке определенной категории

Код:
{% if isCategory('some_cat') %}
Блок на страничке со списком новостей из категории some_cat
{% endif %}
6. Блок показывать всюду кроме определенной категории

Код:
{% if not isCategory('some_cat') %}
Блок не показывается на страничке со списком новостей из категории some_cat
{% endif %}
7. Блок показывать всюду кроме определенного плагина

Код:
{% if not isHandler('tags') %}
Блок показывать всюду кроме определенного плагина (tags)
{% endif %}
8. Блок на страничке определенной полной новости или полных новостей определенной категории
Код:
{% if isHandler('news:news') and handler.params.altname == 'altname_novosti' %}
блок на страничке новости с альтнеймом = altname_novosti
{% endif %}
9. Блок только на страничках поиска
Код:
{% if isHandler('search') %}
Блок только на страничках поиска
{% endif %}
10. Блок только на страничках плагина календар/архив
(как я понял, новости в опр промежуток времени)
Код:
{% 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 %}
11. Блок только на страничках регистрации/ввода пароля и т.д.
Код:
{% if isHandler('core:login') %}
на странице входа
{% endif %}

Код:
{% if isHandler('core:registration') %}
на странице рег
{% endif %}

Код:
{% if isHandler('core:lostpassword') %}
на странице востановления пасса
{% endif %}
12. Блок только на страничке плагина тегов
Код:

Код:
{% if isHandler('tags') %}
на странице тегов
{% endif %}
13. Блок только на страничке профиля
Код:

Код:
{% if isHandler('uprofile:show') %}
только на страничке профиля
{% endif %}
Код:
{% if isHandler('uprofile:edit') %}
только на страничке редактированния профиля
{% endif %}
14. Блок только на статике
Код:

Код:
{% if isHandler('static') %}
только на статике
{% endif %}
15. Блок всюду кроме статики
Код:
Код:
{% if not isHandler('static') %}
кроме статики
{% endif %}
16. Блок только на страничке ошибки
Код:

Код:
{% 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]
2. Как понять - кто прикрепил файл.
Если поле 'plugin' пустое, то файл прикреплён напрямую к новости, если заполнено, то там стоит ID прикрепившего файл плагина.

3. Как вывести список прикрепленных файлов, считая что плагины файлы прикладывать не могут:

Код:
К новости прикреплены следующие файлы:
{% for file in _files %}
* <a href="{{ file.url }}">{{ file.origName }}</a><br/>
{% endfor %}
p.s. В текущей версии размера файла нет


Выводим логин пользователя или слово "гость", если пользователь не залогинен:
Код:
Привет, {% 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]
где mainnews - названия блока


разный фон в разных категориях
Код:
<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 %}

Можешь почитать и вот эту статейку "Теги datalist"

Опрос

Ваше мнение

Какой поисковой системой пользуетесь?
Результаты

Последние комментарии

Теги

Anything in here will be replaced on browsers that support the canvas element

Статистика

  • Caйту: 4397 дней
  • Новостей: 566
  • Комменты: 257
  • Зарегистрированно : 662
  • Онлайн всего: [7]
  • Гости: [7]
  • Были сегодня : [2] Google, Яндекс
  • SQL запросов: 30
  • Генерация страницы: 0.356сек
  • Потребление памяти: 5.196 Mb 
  •   Яндекс.Метрика