Теги в шаблоні запису новин
Які значення, умови й повтори розуміє текстовий шаблон запису, які в них опції та межі.
Редагується в розділі Новини → Шаблони записів (зразки «Блог» і «Картка фільму»; зберігається до 20 версій, у кожної кнопка «Повернути»). Шаблон — звичайний текст із розміткою HTML, у який вставляються теги у фігурних і квадратних дужках. Це окремо від помічників PHP-шаблонів: мова тегів не містить PHP, нею керує власник у панелі.
Значення
| Тег | Що виводить | Приклад |
|---|---|---|
{id} | номер запису | {id} |
{title} | назва; опція limit=N обрізає | {title limit=60} |
{url} | адреса запису | <a href="{url}"> |
{site} | назва сайту | {site} |
{date} | дата публікації; опція format= задає вигляд | {date format=d.m.Y} |
{author} | ім’я автора | {author} |
{category} | назва рубрики | {category} |
{category.url} | адреса сторінки рубрики | <a href="{category.url}"> |
{excerpt} | короткий текст; опція limit=N | {excerpt limit=160} |
{body} | повний текст запису | {body} |
{cover} | обкладинка; опція size=ШxВ | {cover size=600x400} |
{views} | кількість переглядів | {views} |
{comments} | кількість коментарів | {comments} |
{readtime} | хвилин на читання | {readtime} |
{field:ІМ’Я} | значення власного поля запису; опції limit=, size= | {field:director} |
{fieldlabel:ІМ’Я} | підпис поля | {fieldlabel:director} |
Опції тегів і значення за замовчуванням
| Опція | Де працює | Якщо не вказана | Якщо вказана |
|---|---|---|---|
limit=N | title, excerpt, body і текстові поля | текст не обрізається | число від 1 до 5000 (менше чи більше зводиться до межі), обрізання за знаками з «…»; у body виводиться простий текст без розмітки; нечислове значення ігнорується |
format=… | date | d.m.Y | дозволені лише знаки d D j m M n Y y H i s a A g G h F, пробіл, ., /, :, -, не більше 20; інакше теж d.m.Y |
size=ШxВ | cover і поле-картинка | картинка без width і height | наприклад 300x450, кожна сторона до 4000; інакше опція ігнорується |
Правильний запис: {cover size=400x300}, {date format=d.m.Y}, {excerpt limit=160}.
Усередині повтору ([each:…]): {item} — поточний елемент, {item.url} — його адреса (для міток і файлів), {item.alt} — підпис картинки (для галереї), {index} — номер за порядком з одиниці.
Теги сторінки запису
Сусідні та пов’язані записи, друк, сторінки тексту, картинки за номером, картка автора, опитування та скарга. Усі значення проходять білий список: текст екранується, адреси — лише шлях від кореня або https://.
| Тег | Що виводить |
|---|---|
{previous.title} {previous.url} {previous.date} {previous.excerpt} {previous.cover_url} | попередній запис (старший); якщо його немає — порожньо. Те саме для {next.…} — наступний |
{item} {item.url} {item.excerpt} {item.date} {item.cover} усередині пов’язаних записів | пов’язані записи (ті, що вказані в записі) |
{print_button} | кнопка «Друк» (працює без скриптів теми) |
{pages} {page.current} {page.total} {page.prev_url} {page.next_url} | запис, розбитий мітками [page]: список сторінок, номер, кількість, посилання; у запису без розбиття порожньо |
{image:1.url} … {image:20.url}, {images.count} | картинки тексту запису за порядком; немає такої — порожньо |
{author.avatar_url} {author.bio} | аватар і «Про себе» автора — лише якщо профіль автора відкритий |
{author.role} {author.role_name} | старша роль автора: підпис і машинна назва; в умові підходить будь-яка з двох, можна кілька через кому |
{author.posts} {author.rss_url} | скільки записів в автора на сайті; стрічка автора |
{poll} | опитування запису (якщо його обрано) |
{poll.question} {poll.status} {poll.votes_text} {poll.url} {poll.close_date} {poll.start_date} | опитування частинами: питання, «триває/закрите», скільки відповіли; підсумки з’являються за налаштуванням опитування («завжди», «після відповіді», «після закриття») — до цього лічильники порожні |
{item.id} {item.votes} {item.percent} {item.bar} {item.votes_text} {item.input} усередині варіантів опитування | варіанти опитування: назва, кількість голосів і частка (після показу підсумків), готове поле голосу |
{poll_form_open} {poll_submit} {poll_form_close} {poll_note} | форма голосу частинами (з ключем захисту) і пояснення, чому голосувати не можна; поки голосувати не можна — порожньо |
{report} | «Поскаржитися на запис» — форма, що розкривається (потрібні коментарі й увімкнені скарги) |
{comments.subscriptions_url} | сторінка «Мої підписки» (тому, хто увійшов) |
{comments_follow} | кнопка «Стежити за коментарями» (тому, хто увійшов, — одним натисканням, гостю — поштою з підтвердженням) |
{archive_day.url} | архів новин за день виходу запису |
Приклади: [if:next.url]<a href="{next.url}">{next.title} →</a>[/if], [each:related]<li><a href="{item.url}">{item}</a></li>[/each], [if:page.total]{pages}[/if], [if:author.role=editor,admin]Редакція[/if].
Умови й повтори
| Запис | Що робить |
|---|---|
[if:ім’я]…[/if] | виводить шматок, якщо значення є (непорожнє) |
[ifnot:ім’я]…[/ifnot] | виводить, якщо значення немає |
[if:ім’я=значення]…[else]…[/if] | порівнює зі значенням, інакше — друга гілка |
[each:tags]…[/each] | повторює за мітками запису |
[each:field:ІМ’Я]…[/each] | повторює за полем із багатьма значеннями: множинний вибір, галерея |
Для умов доступні імена: title, excerpt, body, cover, author, category, views, comments, tags, field:ІМ’Я.
Порівняння: більше, менше, не дорівнює
До умови можна додати оператор: [if:year>2000], [if:price<=100], [if:genre!=драма], [ifnot:year>=2030]. Оператори: =, !=, >, <, >=, <=. Якщо обидві частини — числа (кома як крапка), порівнюються числа, інакше — текст без урахування регістру. Порожнє або відсутнє значення порівняння «більше/менше» не проходить.
Параметри списків: key=value
Список можна налаштувати параметрами через пробіл — після імені, до закривної дужки:
[each:news_list category=films,serials limit=5 sort=views field:year>2000]
<a href="{item.url}">{item.title}</a>
[/each]Звичний запис news_list:cat:3:limit:5 працює як раніше й означає те саме — обирайте будь-який.
| Параметр | Значення |
|---|---|
category (cat) | рубрики: номер чи назва, список 3,5, діапазон 3-7, виключення !news (з діапазону віднімається: 3-7,!5) |
not_category | рубрики, які треба виключити |
limit / start | скільки записів (1–100) / з якого почати |
sort | порядок: new, old, title, views, rating, rand |
days | за скільки останніх днів |
author (user), tag | автор і мітка за номером |
field:ІМ’Я | за додатковим полем: field:year>2000, field:genre!=драма, field:director=Кубрик |
home, fixed, cover, poll, password, comments, featured | прапори; можна yes/no, так/ні, 1/0 |
lang, cache | мова й скільки секунд зберігати результат (до години, лише гостю) |
Невідомий параметр редактор шаблонів підсвічує попередженням із рядком; у тег вміщується до восьми параметрів. Значення з пробілами пишеться в лапках: title="дві частини". Які з параметрів підтримує саме ваш список — дивіться у вставці цього списку.
Безпека та межі
| Правило | Значення |
|---|---|
| PHP, виклики функцій, читання файлів і налаштувань | немає — мова вміє лише підставити значення, перевірити «чи є» і пройти за списком |
| HTML шаблону | очищається за білим списком: без script, style, form, iframe, без атрибутів on* і data-* |
Адреси в href/src | лише http(s)://, шлях від кореня /… і #… |
| Розмір шаблону | не більше 20000 знаків |
| Кількість тегів | не більше 400 |
| Вкладеність умов і повторів | не більше 6 рівнів |
| Повторів у списку | не більше 200 |
| Розмір результату | не більше 300000 знаків |
Значення екрануються на місці: у тексті, в атрибуті та в адресі по-різному, тому назва запису з лапкою чи тегом не ламає верстку.