Хаки и Скрипты Next Generation CMS
irbees2008 irbees2008 Опубликовано - 8 - апреля TWIG
6536 - 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 %}

Можешь почитать и вот эту статейку "Плагин reCAPTCHA"

Опрос

Ваше мнение

Как вам наш дизайн сайта?
Результаты

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

Теги

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

Статистика

  • Caйту: 4365 дней
  • Новостей: 566
  • Комменты: 257
  • Зарегистрированно : 660
  • Онлайн всего: [6]
  • Гости: [6]
  • Были сегодня : [3] Google, Яндекс, Google
  • SQL запросов: 30
  • Генерация страницы: 0.289сек
  • Потребление памяти: 5.250 Mb 
  •   Яндекс.Метрика