Шаблон записи на тегах: карточка фильма
Страница записи — не PHP-файл, а текст с разметкой и тегами: его правит владелец сайта в панели.
Страница записи — не PHP-файл, а текст с разметкой и тегами: его правит владелец сайта в панели. Тег подставляет значение записи или поля, условие показывает кусок только когда значение есть, повтор проходит по списку (жанры, метки, галерея). Прежний текст не пропадает: хранятся последние 20 версий, у каждой кнопка «Вернуть».
Готовый образец: «Кинотеатр»
В «Новости → Шаблоны записей» нажмите «Поставить «Кинотеатр»»: появятся рубрика «Фильмы», 8 своих полей (постер, год, страна, жанры, длительность, оценка, в ролях, трейлер), шаблон страницы и три образца записей. Повторная установка ничего не дублирует; образцы убираются кнопкой «Убрать все образцы».
Текст шаблона страницы:
<div class="news-custom news-custom--film">
[if:field:poster]<div class="news-custom__poster">{field:poster size=300x450}</div>[/if]
<div class="news-custom__info">
<h1>{title}</h1>
<dl>
[if:field:year]<dt>{fieldlabel:year}</dt><dd>{field:year}</dd>[/if]
[if:field:country]<dt>{fieldlabel:country}</dt><dd>{field:country}</dd>[/if]
[if:field:genre]<dt>{fieldlabel:genre}</dt><dd>[each:field:genre]<span>{item}</span> [/each]</dd>[/if]
[if:field:duration]<dt>{fieldlabel:duration}</dt><dd>{field:duration}</dd>[/if]
[if:field:rating]<dt>{fieldlabel:rating}</dt><dd>{field:rating}</dd>[/if]
[if:field:cast]<dt>{fieldlabel:cast}</dt><dd>{field:cast}</dd>[/if]
</dl>
</div>
<div class="news-custom__body">{body}</div>
[if:field:trailer]<div class="news-custom__trailer">{field:trailer}</div>[/if]
</div>Что видно честно. У образцовых записей постера нет, поэтому блок постера не показывается (условие [if:field:poster]). Стили news-custom* теперь есть в общем слое: подписи и значения данных выстроены строками, жанры — метками, оценка — звёздами, на 390 одна колонка без горизонтальной прокрутки.
Что выводят теги
| Тег | Что выводит | Пример |
|---|---|---|
{id} | номер записи | {id} |
{title}, {title limit=60} | название (с обрезкой) | <h1>{title}</h1> |
{url} | адрес записи | <a href="{url}"> |
{site} | название сайта | {site} |
{date}, {date format=d.m.Y} | дата публикации; без format — d.m.Y; формат с пробелами — в кавычках | <time>{date format="d F Y"}</time> |
{author} | автор | {author} |
{category}, {category.url} | рубрика и адрес её страницы | <a href="{category.url}">{category}</a> |
{excerpt}, {excerpt limit=160} | короткий текст | <p>{excerpt limit=160}</p> |
{body} | полный текст записи | {body} |
{cover}, {cover size=400x300} | обложка записи; без size — без размеров | {cover size=600x400} |
{views}, {comments} | просмотры и комментарии | {views} · {comments} |
{readtime} | минут на чтение | {readtime} мин |
{rating} | средняя оценка читателей (звёзды 1–5); пусто, если оценок нет | [if:rating]★ {rating}[/if] |
{rating.count} | число оценок | ({rating.count}) |
{rating.stars} | звёзды готовой разметкой (только в html) | {rating.stars} |
{likes} | число оценок (у нас то же, что {rating.count}) | {likes} |
{author.url} | адрес профиля автора | <a href="{author.url}">{author}</a> |
{comments.url} | адрес блока комментариев записи | <a href="{comments.url}">Комментарии: {comments}</a> |
{comments.word} | слово «комментарий» в нужной форме по числу | {comments} {comments.word} |
{edit_url} | адрес правки записи (виден тем, кому разрешено) | [if:can_edit]<a href="{edit_url}">Править</a>[/if] |
{editor}, {edit_date format=…} | кто и когда правил запись | Правил {editor}, {edit_date format="d.m.Y"} |
{share} | кнопки «Поделиться» | {share} |
{favorite_button} | кнопка «В закладки» | {favorite_button} |
{field:ИМЯ}, {field:ИМЯ limit=N size=ШxВ} | значение своего поля; limit для текста, size для картинки | {field:year} |
{fieldlabel:ИМЯ} | подпись поля | <dt>{fieldlabel:year}</dt> |
Внутри повтора: {item}, {item.url}, {item.alt} (подпись картинки в галерее), {index} — номер с единицы.
| Условие или повтор | Что делает | Пример |
|---|---|---|
[if:имя]…[/if] | показывает, если значение есть | [if:cover]{cover}[/if] |
[ifnot:имя]…[/ifnot] | показывает, если значения нет | [ifnot:excerpt]без описания[/ifnot] |
[if:имя=значение]…[else]…[/if] | сравнение | [if:field:rating=5]★[else]—[/if] |
[if:pinned]…[/if] | запись закреплена | [if:pinned]📌[/if] |
[if:new]…[/if], [if:updated]…[/if], [if:edited]…[/if] | запись новая (в пределах news.new_hours, 24 по умолчанию, 0 — выключено), обновлена (news.updated_hours), была отредактирована | [if:new]<b>Новое</b>[/if] |
[if:can_edit]…[/if] | у посетителя есть право править запись | [if:can_edit]…[/if] |
[if:role=а,б]…[/if] | посетитель из любой из перечисленных ролей | [if:role=editor,admin]…[/if] |
[each:tags]…[/each] | метки записи | [each:tags]<a href="{item.url}">{item}</a>[/each] |
[each:field:ИМЯ]…[/each] | поле с несколькими значениями (жанры, галерея) | [each:field:genre]<span>{item}</span>[/each] |
Имена для [if:…]: title, excerpt, body, cover, author, category, views, comments, tags, rating, pinned, new, updated, edited, can_edit, field:ИМЯ. Оценка включается флагом записи «Разрешить оценку» и настройками «Новости» (news.rating, news.rating_guests, news.show_views): одна оценка на читателя, гостя узнаёт по хэшу; просмотр засчитывается раз за сеанс, роботы не считаются. В ленте и на странице тегового вида доступны {rating}, {rating_count}, {views}, {rating_url}. Опции: limit — число 1–5000 (меньше или больше сводится к границе), режет по знакам с «…»; format у date — только знаки d D j m M n Y y H i s a A g G h F, пробел, ., /, :, -, до 20; size — ШxВ, каждая сторона до 4000, иначе игнорируется.
Безопасность и пределы
PHP, вызов функций и чтение файлов не работают. Разметка очищается по белому списку (без script, style, form, iframe, on*, data-*); адреса только http(s)://, /путь, #. Шаблон до 20000 знаков, до 400 тегов, вложенность до 6, повторов до 60.
Обновлено 16.10.2026
Пока никто не высказался. Будьте первым.