N1 Nex1on

Вигляди на тегах: як переробити сторінку без 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 з каталогу, руками не пишеться.

МодульЕлементВиглядЩо виводитьВставкаПараметри
bannersbanners.after_contentблокБанери під вмістом{block:banners.after_content}—
bannersbanners.bannerблокОдин банер{block:banners.banner}id
bannersbanners.before_contentблокБанери над вмістом{block:banners.before_content}—
bannersbanners.footerблокБанери в підвалі{block:banners.footer}—
bannersbanners.headerблокБанери в шапці{block:banners.header}—
bannersbanners.placeблокБанери місця{block:banners.place place=sidebar}place (topbar/header/before_content/sidebar/after_content/footer/between_feed/between_comments)
bannersbanners.sidebarблокБанери в бічній колонці{block:banners.sidebar}—
bannersbanners.topbarблокБанери в смузі над шапкою{block:banners.topbar}—
commentscomments.threadблокОбговорення під записом{block:comments.thread}—
contentcontent.factsблокДеталі{block:content.facts}—
contentcontent.vakansii_homeблокВакансії{block:content.vakansii_home}—
downloadsdownloads.homeблокФайли на головній{block:downloads.home}—
downloadsdownloads.latestблокОстанні файли{block:downloads.latest}—
downloadsdownloads.releasesсписокОстанні релізи[each:list:downloads_releases:limit:5]{item.title}[/each]limit
eventsevents.homeблокНайближчі події{block:events.home}—
favoritesfavorites.starблокЗакладка{block:favorites.star}—
formsforms.formформаФорма{block:forms.form}id
forumforum.homeблокОбговорення на головній{block:forum.home}—
forumforum.latestблокОстанні обговорення{block:forum.latest}—
forumforum.topicsсписокОстанні теми[each:list:forum_topics:limit:5]{item.title}[/each]limit
gallerygallery.homeблокЗ галереї{block:gallery.home}—
highlighthighlight.scriptблокПідсвічування коду{block:highlight.script}—
newsnews.archiveсписокАрхів за місяцями[each:list:news_archive:limit:12]{item.title}[/each]limit
newsnews.archive_boxблокБлок «Архів»{block:news.archive_box}—
newsnews.categoriesсписокРубрики деревом[each:list:news_categories]{item.title}[/each]—
newsnews.commentsсписокОстанні коментарі[each:list:news_comments:limit:5]{item.name}[/each]limit, cat
newsnews.countчисло/текстЧисло{block:news.count what=news period=all}what (news/comments), period (all/day/week/month)
newsnews.feed_boxблокБлок «Стрічка»{block:news.feed_box}—
newsnews.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)
newsnews.latest_boxблокБлок «Останні новини»{block:news.latest_box}—
newsnews.rssкнопкаКнопка RSS{block:news.rss}—
newsnews.suggestкнопкаКнопка «Запропонувати запис»{block:news.suggest}—
newsnews.tagsсписокХмара міток[each:list:news_tags:limit:30]{item.title}[/each]limit
pagespages.listблокСторінки{block:pages.list}—
pollspolls.currentблокОпитування{block:polls.current}—
pollspolls.oneблокОдне опитування{block:polls.one}id
registryregistry.latestблокОстання версія рушія{block:registry.latest}—
reviewsreviews.homeблокВідгуки клієнтів{block:reviews.home}—
shareshare.afterблокКнопки «поділитися»{block:share.after}—
shopshop.cartкнопкаКошик{block:shop.cart}—
shopshop.cart_iconблокЗначок кошика{block:shop.cart_icon}—
shopshop.categories_tilesблокКатегорії плитками{block:shop.categories_tiles}—
shopshop.latestблокНовинки{block:shop.latest}—
shopshop.productsсписокНові товари[each:list:shop_products:limit:4]{item.title}[/each]limit
shopshop.showcaseблокВітрина крамниці{block:shop.showcase}—
subscribesubscribe.compactблокПідписатися на новини{block:subscribe.compact}—
subscribesubscribe.formблокРозсилка{block:subscribe.form}—
tagstags.cloudблокМітки{block:tags.cloud}—
tagstags.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

На цій сторінці
Поділитися: Telegram WhatsApp
Відкладати можна і без входу: закладки збережуться в цьому браузері, а після входу їх можна перенести до облікового запису. Вхід
Обговорення

Коментарі

Обговорення ще не почалося

Поки ніхто не висловився. Будьте першим.

Поскаржитися на запис