Вигляди на тегах: як переробити сторінку без PHP
Будь-який вигляд сайту (головну, вхід, реєстрацію, пошук, кабінет, сторінку) можна замінити файлом тегів. Це звичайна HTML-розмітка, у яку вставляються теги {ім'я}, умови … і повтори [each:список]…[/each] (спільна мова тегів, та сама, що в «Новини → Шаблони записів»…
Будь-який вигляд сайту (головну, вхід, реєстрацію, пошук, кабінет, сторінку) можна замінити файлом тегів. Це звичайна HTML-розмітка, у яку вставляються теги {ім'я}, умови [if:ім'я]…[/if] і повтори [each:список]…[/each] (спільна мова тегів, та сама, що в «Новини → Шаблони записів»).
Як увімкнути
У вашій темі покладіть файл за шляхом вигляду із закінченням .tpl.html замість .php:
| Що ви замінюєте | Файл у темі |
|---|---|
| головна розмітка (шапка, місця, вміст, підвал) | themes/<ім'я>/views/layouts/main.tpl.html |
| сторінка сайту | themes/<ім'я>/views/pages/show.tpl.html |
| вхід | themes/<ім'я>/views/auth/login.tpl.html |
| реєстрація, відновлення пароля, скидання, другий фактор, підтвердження пошти, правила | auth/register.tpl.html, auth/forgot.tpl.html, auth/reset.tpl.html, auth/two-factor.tpl.html, auth/verify.tpl.html, auth/rules.tpl.html |
| пошук | search.tpl.html |
| кабінет, безпека, сеанси, приватність | auth/profile.tpl.html, auth/profile-security.tpl.html, auth/profile-sessions.tpl.html, auth/profile-privacy.tpl.html |
| публічний профіль | auth/public-profile.tpl.html |
Якщо файла тегів немає або він зламаний (наприклад, не закрито блок), працює звичайний PHP-вигляд, сторінка не ламається. Файл тегів у спільній теці теми головніший за вигляд модуля, як і PHP-файл.
Головна розмітка: приклад у 15 рядків
<header class="my-head">
<a href="{home}">{site_name}</a>
[each:menu]<a href="{item.url}">{item.title}</a> [/each]
{languages} {search}
[if:user.logged]<a href="{user.url}">{user.name}</a>[else]<a href="{user.login_url}">Увійти</a>[/if]
</header>
<main>{content}</main>
<aside>{region:sidebar}</aside>
<footer>© {year} {site_name}</footer>Покладіть це в themes/<ім'я>/views/layouts/main.tpl.html, і сторінка матиме вашу шапку з меню, вибором мови, пошуком і входом, вміст, бічну колонку та підвал. <head>, скрипти рушія та кнопка «нагору» лишаються від рушія; стилі й шрифти підключаються через theme.json і assets — у файлі тегів їх писати не потрібно.
Спільні теги будь-якої сторінки
| Тег | Що виводить |
|---|---|
{site_name} | назва сайту |
{locale} | мова сторінки |
{year} | поточний рік |
{home} | адреса головної |
{canonical} | основна адреса цієї сторінки |
{theme} | шлях до теки теми |
{user.logged} | умова: відвідувач увійшов ([if:user.logged]…[/if]) |
{user.name}, {user.url} | ім'я того, хто увійшов, і адреса його профілю |
{user.login_url} | адреса сторінки входу |
{user.avatar} | адреса аватара; порожньо, якщо аватара немає (для верстки [if:user.avatar]…[/if]) |
{user.role} | назва ролі того, хто увійшов |
{user.pm_unread} | кількість непрочитаних особистих повідомлень; порожньо, якщо модуль «Повідомлення» вимкнено |
{user.favorites_count} | кількість закладок |
{user.pm_url}, {user.favorites_url} | адреси особистих повідомлень і закладок |
{user.admin_url}, [if:user.can_admin]…[/if] | адреса панелі й умова «до панелі пускають» (порожньо, якщо ні) |
{user.register_url}, {user.forgot_url} | адреси реєстрації та відновлення пароля |
{logout_button} | готова кнопка «Вийти» з ключем захисту (вихід у нас — форма, посиланням не можна через ключ) |
{menu_toggle} | кнопка «Меню» і меню розділів (те, що на телефоні відкривається кнопкою) |
{user_menu} | меню учасника: профіль, повідомлення, панель, вихід |
{login} | готовий блок входу та реєстрації |
{content} | вміст сторінки в контейнері рушія (не вилазить за ширину екрана); для кабінету, форуму й форм беріть його |
{content_raw} | вміст без обгортки й без обмеження ширини, лише для власних повносторінкових розкладок |
{languages} | вибір мови |
{search} | рядок пошуку |
{poll} | поточне опитування |
{region:header}, {region:before_content}, {region:sidebar}, {region:after_content}, {region:footer}, {region:head_actions} | блоки модулів, поставлені в це місце теми |
[each:menu]…[/each] | пункти меню сайту; всередині {item.title}, {item.url}, {item.active} |
Теги з даних вигляду, умови, повтори
Далі йдуть дані, які вигляд отримав від рушія: {ім'я}, {a.b}, [each:список] з {item}, {item.ключ}, {index}, умови [if:ім'я], [if:ім'я=значення], [ifnot:ім'я], опція limit=N. Секретне (ключі захисту форм, паролі, токени, сеанси) та об'єкти через теги не віддаються.
Вигляди ядра на тегах
| Вигляд | Що доступно (крім спільних тегів) |
|---|---|
auth/login | {form} — готова форма входу; слова {t.eyebrow}, {t.title}, {t.lead}, {t.forgot}, {t.no_account}, {t.submit} та інші; {forgot_url}, {register_url}; умова [if:can_register] |
auth/register | {form}, слова {t.…} (префікс auth.register), {forgot_url} |
auth/forgot, auth/reset, auth/two-factor, auth/verify, auth/rules | у кожного {form} і слова {t.…} (префікси auth.forgot, auth.reset, auth.2fa, auth.verify, auth.rules) |
search | {form} (рядок пошуку), {query}, [each:results] ({item.title}, {item.url}, {item.excerpt}…), [each:popular], {found.*}, [if:tooShort], {minimum}, слова {t.…} (search.*) |
auth/profile, auth/profile-security, auth/profile-sessions, auth/profile-privacy | {form} (і {form:2}, {form:3} — решта форм вигляду за порядком), {identity} (шапка кабінету), {profile_nav} (меню кабінету), слова {t.…} (profile.*) |
auth/public-profile | {identity} і дані профілю |
pages/show | {title}, {page.title}, {page.excerpt}, {page.body} (текст сторінки, розмітка рушія), {cover}, [each:trail], [each:children], [each:siblings] |
Форма за частинами
У виглядах із формою (вхід, реєстрація, відновлення, скидання пароля, другий фактор, підтвердження пошти, правила, пошук, кабінет) форму можна вивести цілком тегом {form} — це безпечний шлях, або зібрати за частинами, щоб розставити поля в потрібному порядку:
| Тег | Що виводить |
|---|---|
{form_open} | відкриття форми з її адресою та прихованими полями; ключ захисту — там |
{field:ім'я} | поле цілком: підпис, підказка, помилка, як побудував рушій; ім'я — це name у поля введення |
{field:captcha} | перевірка «не робот» |
{submit} | кнопка надсилання |
{form_close} | закриття форми |
{form_open}
{field:email}
{field:password}
{field:captcha}
{submit}
{form_close}Поле, якого немає у вашому шаблоні, у формі не з'явиться: розстановка — вибір теми. Обов'язкові поля та перевірку «не робот» не пропускайте, без них форма не пройде перевірку.
Слово {t.хвіст} дає підпис інтерфейсу «<префікс вигляду>.<хвіст>» мовою відвідувача, тому тексти в шаблоні різними мовами не дублюються.
Обговорення (коментарі) на тегах
Файл views/comments/thread.tpl.html теми замінює вигляд обговорення під записом, сторінкою та іншими матеріалами. Якщо файла немає або він не пройшов перевірку, працює звичайний вигляд.
| Тег | Що виводить |
|---|---|
[each:comments] … [/each] | коментарі пласким списком у порядку показу: відповідь іде одразу за своїм коментарем, глибину дає {item.level} (0 — корінь) |
{item.id} {item.name} {item.avatar} {item.profile} {item.date} | номер (для якоря), ім'я автора, адреса аватара, адреса профілю (порожньо, якщо закритий), дата |
{item.text} | текст учасника: розмітка рушія, очищена (скриптів і чужих тегів немає); у схованого людиною через «Кого я не бачу» порожній |
{item.likes} {item.minus} {item.rating} {item.verified} {item.op} | «Корисно» (число) або оцінка «+ / −» (число «за» мінус «проти»; {item.minus} — оцінка від'ємна), зірки відгуку, «перевірений покупець», «автор запису» |
{item.place} {item.group} {item.online} {item.signature} | поля картки автора, якщо їх увімкнув власник (місце, група, «на сайті», підпис) |
{item.image1} {item.image2} {item.image3} | картинки коментаря (мініатюри) |
{item.actions} | готові кнопки рушія: «Корисно», «Відповісти», «Цитувати», «Змінити», «Видалити», «Не бачити», «Поскаржитися» — правила показу ті самі, що у звичайному вигляді |
{compose} | форма коментаря цілком (поля, пастка для роботів, ключ захисту) і скрипт відповіді |
{form_open} {field:body} {field:author_name} {field:author_email} {submit} {form_close} | та сама форма за частинами — верстка ваша, ключ захисту й приховані поля лишаються в рушія |
{follow} | кнопка «Стежити за коментарями» (той, хто увійшов із підтвердженою поштою, — одразу, гість називає пошту й підтверджує листом); порожньо, якщо підписку вимкнув власник |
{comments_script} | скрипт «Відповісти»/«Цитувати»/зірки окремо (всередині {compose} і {form_close} він уже є) |
{pager} {report} {notice} | посторінкова навігація, «Поскаржитися на запис», повідомлення замість форми (обговорення закрите, ліміт, потрібен вхід) |
{comments.total} [if:closed] [if:can_write] | кількість коментарів; обговорення закрите; писати можна |
Приклад:
<section id="comments"><h2>{comments.word}: {comments.total}</h2>
[each:comments]
<article id="comment-{item.id}" class="c c-l{item.level}"><b>{item.name}</b> <time>{item.date}</time>
<div>{item.text}</div><footer>{item.actions}</footer></article>
[/each]
{pager}
[if:can_write]{compose}[else]{notice}[/if]
</section>Списки з відбором, архів, мітки, рубрики та числа сайту (модуль «Новини»)
Ці теги працюють у будь-якому файлі тегів: у головній рамці, на сторінці, у стрічці. Відбір записано в самій назві списку парами «ключ:значення» через двокрапку; кілька значень — через «_». Ключі захисту, пошта й закрите до списків не потрапляють; записи добираються тим самим запитом, що й стрічка (права, пароль, мова, строк дії).
| Список | Що дає | Відбір у назві |
|---|---|---|
[each:news_list category=films,3 limit=5 sort=views] … [/each] (або звично [each:news_list:cat:3_5:limit:5:sort:views]) | записи | |
[each:comments_list limit=5 category=3] (або [each:comments_list:limit:5:cat:3]) | останні коментарі до записів (у того, хто увійшов, у {item.name} його ім'я) | limit, category, not_category, author (номери або логіни), days, post (номери записів) |
[each:news_archive:limit:12] | місяці архіву | limit |
[each:news_tags:limit:30] | хмара міток | limit |
[each:news_categories] | рубрики деревом (батьківська, потім вкладені) | category (які рубрики; номер, адреса, список), not_category (крім), subcat — yes із вкладеними, no лише названі, only лише вкладені, depth — скільки рівнів, limit |
В елементі news_list: {item.id} {item.title} {item.url} {item.excerpt} {item.date} {item.cover} {item.cover_large} {item.category} {item.category_url} {item.by} (автор, якщо сайт показує авторів) {item.views} {item.rating} {item.rating_count} {item.comments} {item.pinned} {item.locked} (запис під паролем: видно лише назву) {item.first} {index}. У comments_list: {item.name} {item.text} (до 160 знаків, без розмітки) {item.url} {item.date} {item.title} (назва запису) {item.avatar}. У news_archive: {item.title} {item.url} {item.count}. У news_tags: {item.title} {item.url} {item.count} {item.weight} (1–5, для розміру шрифту). У news_categories: {item.title} {item.url} {item.count} {item.active} (поточна рубрика) {item.level} (0 — верхній рівень) {item.parent} {item.id} [if:item.has_children].
Числа сайту: {stat.news} {stat.news_day} {stat.news_week} {stat.news_month}, те саме для comments і users ({stat.comments_week}, {stat.users_month}).
Приклад «Рубрики з кількістю записів» і «Популярне за місяць»:
<nav><ul>
[each:news_categories]<li class="l{item.level}"><a href="{item.url}">{item.title}</a> <small>{item.count}</small></li>[/each]
</ul></nav>
<h3>Популярне</h3>
[each:news_list:days:30:sort:views:limit:5]<p><a href="{item.url}">{item.title}</a> · {item.views}</p>[/each]
<p>Записів: {stat.news}, за тиждень: {stat.news_week}</p>«Завантаження» на тегах
Шаблон під рубрику. Новини, «Завантаження», форум (розділ) і крамниця (категорія) називають рубрику сторінки рушієві (адреса рубрики латиницею, цифрами й дефісом, до 40 знаків). Тоді файл <вигляд>.<адреса-рубрики>.tpl.html (наприклад, views/news/show.tech.tpl.html або views/forum/section.api.tpl.html) береться раніше за загальний <вигляд>.tpl.html; для решти рубрик лишається загальний. Опис рубрики сторінки (без розмітки) модуль також віддає в спільні дані сторінки; тег {category.description} підключає ядро. Обрізання тексту в тегах запису: limit=N знаків, words=N слів, wordsafe=1 — за межею слова.
Файли views/downloads/index.tpl.html (каталог і рубрика) та views/downloads/show.tpl.html (сторінка релізу) теми замінюють PHP-вигляди модуля. Завантаження йде звичайними адресами рушія: лічильник, обмеження доступу й паролі працюють як раніше.
| Вигляд | Тег | Що виводить |
|---|---|---|
| каталог | [each:cards] | релізи: {item.title} {item.url} {item.description} {item.version} {item.date} {item.cover} {item.category} {item.category_url} {item.hits} {item.first} |
| каталог | [each:rubrics] | рубрики: {item.title} {item.url} {item.count} {item.active} |
| каталог | {category.title} {category.url} {category_description} {pager} {t.empty} | рубрика сторінки (від рамки), її опис, гортання, слово «порожньо» |
| реліз | {item.title} {item.description} {item.version} {item.hits} {item.changelog} {item.requirements} {date} {cover} {cover_large} | сам реліз |
| реліз | {category.title} {category.url} {files.count} [if:allow_download] | рубрика, кількість файлів, «є що завантажити» |
| реліз | [each:files] | файли: {item.name} {item.url} (адреса завантаження) {item.platform} {item.arch} {item.size} {item.ext} {item.hits} {item.primary} {item.external} (хост зовнішнього посилання) |
| реліз | [each:sums] | контрольні суми: {item.name} {item.checksum} — щоб перевірити завантажене |
Приклад сторінки релізу:
<h1>{item.title}</h1><p>v{item.version} · {date} · завантажено {item.hits}</p>
[if:allow_download]
[each:files]<p><a href="{item.url}">{item.name}</a> {item.platform} {item.arch} {item.size} ↓{item.hits}</p>[/each]
[/if]
<h2>Що нового</h2><p>{item.changelog}</p>
<h2>Вимоги</h2><p>{item.requirements}</p>
[each:sums]<code>{item.name}: {item.checksum}</code>[/each]Банери на тегах
У будь-якому файлі тегів банер ставиться за номером або цілим місцем. Правила показу ті самі, що й у звичайних банерів: строк, розклад, пристрій, сторінки, ролі, країни, «лише перша сторінка».
| Тег | Що виводить |
|---|---|
{banner:5} | банер з номером 5 (номер — у списку банерів панелі) |
{banner_place:sidebar} | усі банери місця цілком; місця: topbar, header, before_content, sidebar, after_content, footer, between_feed (між записами стрічки), between_comments (між коментарями) |
Місця between_feed і between_comments малюють самі вигляди новин і коментарів: банер іде після кожного третього запису стрічки й після кожного п'ятого коментаря. У банера в панелі позначаються ролі (guest — гість), країни (RU, UA — лише в них; -BY — скрізь, крім) і «лише на першій сторінці розділу». Сторінка, де є такий банер, не йде в спільний кеш: відповідь залежить від глядача.
Каталог вставок: будь-який елемент модуля — одним тегом
Кожен модуль оголошує все, що можна винести на будь-яку сторінку й вставити в будь-яке місце файла тегів теми: готові блоки, списки для власної верстки, числа, форми та кнопки. Це єдиний каталог: з нього будуються вкладка «Виведення на сайті» в панелі модуля (таблиця елементів, параметри, приклад і кнопка «Копіювати», файли виглядів), підказки редактора шаблонів і ця таблиця.
Як вставляється:
- блок, форма, кнопка, число —
{block:модуль.ім'я параметр=значення}:{block:news.count what=news period=week}; параметрів до чотирьох; - список для власної верстки —
[each:list:модуль_ім'я:параметр:значення:…] … {item.поле} … [/each]:[each:list:news_latest:cat:3:sort:views:limit:5]; кілька значень — через «_», у назві списку «модуль_ім'я» (крапка в назві тега не годиться).
Правило для модуля: елемент виду block, button і form сам відповідає за екранування свого виводу (через e() і вигляди рушія, як будь-який вигляд); число й текст (value) — лише екранований текст без розмітки; список віддає рядки, вони екрануються тегами. Каталог перевіряє параметри, але чужу розмітку не чистить. Параметри перевіряються за описом елемента: число — у межах, вибір — лише зі списку, номери — лише цифри; зайве відкидається. Збій, право, якого немає, перевищення часу або розміру — порожня вставка, сторінка ціла. Старі теги (news_list…, {banner:5}, [each:comments]) продовжують працювати.
Як модуль оголошує елемент (фільтр theme.blocks, запис «модуль.имя» → module, kind (block, list, value, form, button), title, description, params, items, example, works_in, permission, render) — описано в core/Themes/BlockCatalog.php. Готові блоки розкладки модулів (те, що модуль кладе в місця теми) потрапляють у каталог самі — їхній вигляд у таблиці позначено «блок». Таблиця нижче збирається скриптом php dev/katalog-spravka.php з каталогу, руками не пишеться.
| Модуль | Елемент | Вигляд | Що виводить | Вставка | Параметри |
|---|---|---|---|---|---|
| banners | banners.after_content | блок | Банери під вмістом | {block:banners.after_content} | — |
| banners | banners.banner | блок | Один банер | {block:banners.banner} | id |
| banners | banners.before_content | блок | Банери над вмістом | {block:banners.before_content} | — |
| banners | banners.footer | блок | Банери в підвалі | {block:banners.footer} | — |
| banners | banners.header | блок | Банери в шапці | {block:banners.header} | — |
| banners | banners.place | блок | Банери місця | {block:banners.place place=sidebar} | place (topbar/header/before_content/sidebar/after_content/footer/between_feed/between_comments) |
| banners | banners.sidebar | блок | Банери в бічній колонці | {block:banners.sidebar} | — |
| banners | banners.topbar | блок | Банери в смузі над шапкою | {block:banners.topbar} | — |
| comments | comments.thread | блок | Обговорення під записом | {block:comments.thread} | — |
| content | content.facts | блок | Деталі | {block:content.facts} | — |
| content | content.vakansii_home | блок | Вакансії | {block:content.vakansii_home} | — |
| downloads | downloads.home | блок | Файли на головній | {block:downloads.home} | — |
| downloads | downloads.latest | блок | Останні файли | {block:downloads.latest} | — |
| downloads | downloads.releases | список | Останні релізи | [each:list:downloads_releases:limit:5]{item.title}[/each] | limit |
| events | events.home | блок | Найближчі події | {block:events.home} | — |
| favorites | favorites.star | блок | Закладка | {block:favorites.star} | — |
| forms | forms.form | форма | Форма | {block:forms.form} | id |
| forum | forum.home | блок | Обговорення на головній | {block:forum.home} | — |
| forum | forum.latest | блок | Останні обговорення | {block:forum.latest} | — |
| forum | forum.topics | список | Останні теми | [each:list:forum_topics:limit:5]{item.title}[/each] | limit |
| gallery | gallery.home | блок | З галереї | {block:gallery.home} | — |
| highlight | highlight.script | блок | Підсвічування коду | {block:highlight.script} | — |
| news | news.archive | список | Архів за місяцями | [each:list:news_archive:limit:12]{item.title}[/each] | limit |
| news | news.archive_box | блок | Блок «Архів» | {block:news.archive_box} | — |
| news | news.categories | список | Рубрики деревом | [each:list:news_categories]{item.title}[/each] | — |
| news | news.comments | список | Останні коментарі | [each:list:news_comments:limit:5]{item.name}[/each] | limit, cat |
| news | news.count | число/текст | Число | {block:news.count what=news period=all} | what (news/comments), period (all/day/week/month) |
| news | news.feed_box | блок | Блок «Стрічка» | {block:news.feed_box} | — |
| news | news.latest | список | Записи з відбором | [each:list:news_latest:limit:5:start:0:sort:new]{item.id}[/each] | limit, start, cat, user, days, tag, main, sort (new/old/title/views/rating/rand) |
| news | news.latest_box | блок | Блок «Останні новини» | {block:news.latest_box} | — |
| news | news.rss | кнопка | Кнопка RSS | {block:news.rss} | — |
| news | news.suggest | кнопка | Кнопка «Запропонувати запис» | {block:news.suggest} | — |
| news | news.tags | список | Хмара міток | [each:list:news_tags:limit:30]{item.title}[/each] | limit |
| pages | pages.list | блок | Сторінки | {block:pages.list} | — |
| polls | polls.current | блок | Опитування | {block:polls.current} | — |
| polls | polls.one | блок | Одне опитування | {block:polls.one} | id |
| registry | registry.latest | блок | Остання версія рушія | {block:registry.latest} | — |
| reviews | reviews.home | блок | Відгуки клієнтів | {block:reviews.home} | — |
| share | share.after | блок | Кнопки «поділитися» | {block:share.after} | — |
| shop | shop.cart | кнопка | Кошик | {block:shop.cart} | — |
| shop | shop.cart_icon | блок | Значок кошика | {block:shop.cart_icon} | — |
| shop | shop.categories_tiles | блок | Категорії плитками | {block:shop.categories_tiles} | — |
| shop | shop.latest | блок | Новинки | {block:shop.latest} | — |
| shop | shop.products | список | Нові товари | [each:list:shop_products:limit:4]{item.title}[/each] | limit |
| shop | shop.showcase | блок | Вітрина крамниці | {block:shop.showcase} | — |
| subscribe | subscribe.compact | блок | Підписатися на новини | {block:subscribe.compact} | — |
| subscribe | subscribe.form | блок | Розсилка | {block:subscribe.form} | — |
| tags | tags.cloud | блок | Мітки | {block:tags.cloud} | — |
| tags | tags.subject | блок | Мітки | {block:tags.subject} | — |
Безпека
- Форми малює лише рушій: у файлі тегів тег
<form>вичищається, тому ключ захисту й поля завжди на місці. Форму виводить{form}. - Розмітка шаблону очищається за білим списком: без
script,style,iframe, обробників подій і атрибутів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=значення | поле з прапорцем «фільтр» (інакше список порожній, а не вся стрічка) |
| Значення посиланням («Режисер: Нолан» → усі записи з цим значенням) | автоматично на сторінці запису; у списках — <a href="{item.fieldurl:ім'я}">{item.field:ім'я}</a>; адреса вигляду /news/рубрика?field=ім'я&value=значення | прапорці «фільтр» і «значення посиланням»; види: рядок, список-вибір, число, дріб |
| Пошук у панелі | рядок пошуку за списком записів знаходить значення полів | прапорець «пошук» |
| RSS | до опису запису додається «Підпис: значення» | прапорець «віддавати в RSS»; лише публічні поля |
| Заміна по сайту | «Пошук і заміна» бачить значення полів новин | право на заміну |
Адреса з field=…&value=… показує над стрічкою плашку «Підпис: значення» і кнопку «Скинути добір». Закриті поля (лише для персоналу, за ролями) тегами та в RSS не віддаються.
«Запропонувати запис» на тегах (модуль «Новини»)
Файли теми: views/news/suggest.tpl.html (форма для того, хто увійшов) і views/news/suggest-login.tpl.html (гостеві: пояснення та кнопки входу). Якщо файла немає, сторінка працює як раніше.
Форму пише рушій (ключ захисту, пастка від роботів, перевірка): цілком — {form}, або за частинами {form_open} … {form_close}:
| Тег | Що це |
|---|---|
{field:title}, {field:excerpt}, {field:category}, {field:tags}, {field:body} | основні поля; поле, якого немає в шаблоні, у формі не опиниться (заголовок і текст обов'язкові — без них форма не пройде) |
{field:f_ім'я} | власне додаткове поле: лише те, яке власник позначив у «Дод. поля» прапорцями «у формі сайту» і «заповнює відвідувач»; прив'язане до рубрики показується, коли вибрано її; картинки, файли й відео відвідувачеві не даються |
{submit} | кнопка надсилання |
{t.title} {t.lead} {t.note} {t.send} {t.mine} {t.too_many} | слова сторінки мовою відвідувача |
{left}, [if:can_send] | скільки пропозицій лишилося за добу; чи можна ще надсилати |
{mine_url} | адреса «Мої пропозиції» |
[each:categories] | рубрики для вибору: {item.id} {item.title} |
Сторінка для гостя: {login_url}, {register_url}, [if:can_register], слова {t.guest_title} {t.guest_text} {t.guest_login} {t.guest_register}.
Обновлено 16.10.2026
Пока никто не высказался. Будьте первым.