Теги в шаблоне записи новостей
Какие значения, условия и повторы понимает текстовый шаблон записи, какие у них опции и пределы.
Правится в разделе Новости → Шаблоны записей (образцы «Блог» и «Карточка фильма»; хранится до 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 знаков |
Значения экранируются по месту: в тексте, в атрибуте и в адресе по-разному, поэтому название записи с кавычкой или тегом не ломает вёрстку.