Каталог вставок, дод. поля та інформери на тегах
Як вставити будь-який блок, список, число чи форму модуля одним тегом, де працюють додаткові поля новин і як показати чужу стрічку на сторінці.
Каталог вставок: будь-який елемент модуля — одним тегом
Кожен модуль оголошує все, що можна винести на будь-яку сторінку й вставити в будь-яке місце файлу тегів теми: готові блоки, списки для власної верстки, числа, форми та кнопки. Це єдиний каталог: з нього будуються вкладка «Вивід на сайті» в панелі модуля (таблиця елементів, параметри, приклад і кнопка «Копіювати», файли виглядів), підказки редактора шаблонів і сторінки «Довідки» про кожен модуль. Повний список елементів із готовим кодом дивіться на сторінці модуля в «Довідці» (/help/modules/назва-модуля): він завжди збігається з тим, що є на вашому сайті.
Як вставляється:
- блок, форма, кнопка, число —
{block:модуль.назва параметр=значення}:{block:news.count what=news period=week}; параметрів до чотирьох; - список для власної верстки —
[each:list:модуль_назва:параметр:значення:…] … {item.поле} … [/each]:[each:list:news_latest:cat:3:sort:views:limit:5]; кілька значень — через «_», у назві списку «модуль_назва» (крапка в назві тега не годиться).
{block:news.count what=news period=week}
{block:subscribe.compact}
[each:list:shop_products:limit:4]<p>{item.title}</p>[/each]Елемент виду блок, кнопка й форма сам відповідає за екранування свого виводу (через e() і вигляди рушія, як будь-який вигляд); число й текст — лише екранований текст без розмітки; список віддає рядки, вони екрануються тегами. Параметри перевіряються за описом елемента: число — у межах, вибір — лише зі списку, номери — лише цифри; зайве відкидається. Збій, право, якого немає, перевищення часу чи розміру — порожня вставка, сторінка ціла. Старі теги (news_list…, {banner:5}, [each:comments]) продовжують працювати.
Модуль оголошує елемент через фільтр theme.blocks: запис «модуль.назва» з полями kind (block, list, value, form, button), title, description, params, items, example, works_in, permission, render. Готові блоки розкладки модулів (те, що модуль кладе в місця теми) потрапляють до каталогу самі.
Безпека тегів
- форми малює лише рушій: у файлі тегів тег form вичищається, тому ключ захисту й поля завжди на місці; форму виводить
{form}; - розмітка шаблону очищається за білим списком: без скриптів, стилів, фреймів, обробників подій та атрибутів
data-*; адреси лишеhttp(s)://,/шлях,#; - значення екрануються за місцем (у тексті, в атрибуті, в адресі — по-різному);
- межі ті самі, що в мови тегів: розмір шаблону 20000 знаків, 400 тегів, вкладеність 6, повторів 200;
- листи у файлах тегів не потрібні: їхні тексти правляться в «Пошта → тексти листів».
Додаткові поля новин: де працюють
Поля заводяться в розділі «Дод. поля» (господар «Новини», можна обмежити рубриками). Порожнє поле ніде не показується: ні значення, ні підпис.
| Де | Що писати | Умова |
|---|---|---|
| Повний запис | {field:назва}, {fieldlabel:назва}, [if:field:назва], {fieldurl:назва} | поле видно цьому читачеві |
Картка стрічки (index.tpl.html, [each:cards]) | {item.field:назва}, {item.fieldlabel:назва}, {item.fieldurl:назва}, [if:item.field:назва] | пташка «у списку»; у закритого запису (під паролем) полів немає |
Списки й блоки ([each:news_list …], [each:list:news_latest], {block:news.latest_box}) | ті самі теги з item. | те саме |
| Відбір записів | [each:news_list field:рік>2000 field:жанр=драма], custom=назва (заповнено), custom=назва is=значення | поле з пташкою «фільтр» (інакше список порожній, а не вся стрічка) |
| Значення посиланням («Режисер: Нолан» → усі записи з цим значенням) | автоматично на сторінці запису; у списках — {item.fieldurl:назва} в адресі посилання; адреса виду /news/рубрика?field=назва&value=значення | пташки «фільтр» і «значення посиланням»; види: рядок, список-вибір, число, дріб |
| Пошук у панелі | рядок пошуку за списком записів знаходить значення полів | пташка «пошук» |
| RSS | до опису запису додається «Підпис: значення» | пташка «віддавати в RSS»; лише публічні поля |
| Заміна по сайту | «Пошук і заміна» бачить значення полів новин | право на заміну |
Адреса з field=…&value=… показує над стрічкою плашку «Підпис: значення» і кнопку «Скинути відбір». Закриті поля (лише для персоналу, за ролями) тегами й у RSS не віддаються.
Інформери: чужі стрічки на сторінці
У розділі «Контент → Інформери» власник підключає стрічку іншого сайту (RSS, Atom або JSON) під короткою назвою. Сайт показує останню збережену копію й не чекає на чужий сервер; копію оновлюють за розкладом. Вставляється блоком або списком у будь-яке місце будь-якого виду:
| Що писати | Що вийде |
|---|---|
{block:site.informer name=НАЗВА limit=5} | готовий список посилань на записи стрічки (text=1 — зі стислим текстом) |
[each:list:site_informer_list:name:НАЗВА:limit:5] … [/each] | власний вигляд кожного запису |
У записі списку: {item.title} {item.url} {item.date} (за форматом сайту) {item.date_iso} {item.text} (стислий текст, без розмітки) {item.by} {item.category} {item.image} (адреса першої картинки; порожньо, якщо її немає) {item.image2} {item.image3} (друга й третя, якщо є в стрічці) {item.images_count} (скільки картинок, до трьох). Для джерел JSON — ще поля, названі власником ({item.поле}).
Що чужого приходить: лише заголовок, посилання, дата, стислий текст, автор, рубрика й адреса картинки — простим текстом і лише за http(s). Сама картинка на сайт не копіюється: браузер відвідувача бере її з чужого сервера, якщо тема виводить {item.image}. Посилання йдуть із rel="nofollow noopener noreferrer ugc".
[each:list:site_informer_list:name:novosti:limit:3]
<article>[if:item.image]<img src="{item.image}" alt="" loading="lazy">[/if]
<a href="{item.url}" rel="nofollow noopener">{item.title}</a>
<small>{item.by} · {item.category} · <time datetime="{item.date_iso}">{item.date}</time></small></article>
[/each]