#Виды в теме
Вид — это вёрстка одного модуля. Тема состоит в основном из них.
{
"module": "portfolio",
"code": "moya.portfolio",
"title": "Моя тема — портфолио",
"before_content": "<section class=\"works\"><div class=\"wrap\">",
"html": "<div class=\"grid\">{item}</div>",
"item_html": "<article><img src=\"{module.portfolio.kartinka}\"><h3>{module.portfolio.zagolovok}</h3></article>",
"after_content": "</div></section>",
"css": ".works{padding:80px 0}",
"js": ""
}| Ключ | Что это |
|---|---|
module | имя модуля, чью вёрстку описываем |
code | имя вида: по нему его зовут view=moya.portfolio |
html | оболочка списка; {item} — место карточек |
item_html | одна карточка, повторяется по числу записей |
before_content / after_content | обёртка вокруг всего |
css, js | стили и скрипты вида, уходят отдельными файлами |
#Как обращаться к полям записи
{module.имя_модуля.имя_поля} — и никак иначе.
Формы {item.поле} в движке нет. Такая метка не подставится, а всё
неподставившееся вычищается перед отдачей: карточки выйдут пустыми, и
причину будет не видно.
Первая часть — имя модуля, а не справочника. У решений они обычно
совпадают (модуль portfolio читает справочник portfolio), но у своего
модуля могут различаться — смотрите имя модуля.
Имена полей — настоящие, из справочника. У поставляемого portfolio это
zagolovok, tag, cena, cvet, kartinka — не title и не image.
Посмотреть: Справочники → нужный → поля.
Некоторые поля получают дополнительные виды:
| Метка | Что даёт |
|---|---|
{module.blog.data} | дата по-человечески: «12 мая 2026» |
{module.blog.data_iso} | 2026-05-12 — для атрибута datetime |
{module.shop.cena} | «1 990 ₽» |
{module.shop.cena_raw} | 1990.00 — число для корзины |
#Вид страницы — особый случай
У PFM-модуля item_html — это шаблон содержимого записи, а не
карточка списка. Если страницы наполняются текстом, в нём обязателен
{module.page.content}:
{ "module": "page", "code": "moya.page",
"html": "<main>{item}</main>",
"item_html": "{module.page.content}" }Без него текст любой страницы молча пропадёт. Пустой item_html уместен
только у одностраничника, где весь контент собран блоками, — и именно
поэтому такой шаблон опасно брать за образец для многостраничного сайта.
Содержимое записи попадает в документ до раскрытия вызовов блоков,
поэтому {module.имя_блока}, написанные владельцем в редакторе
страницы, работают. То есть вид страницы — тонкая оболочка, а сама
страница собирается из блоков в панели. Разные макеты по типам страниц
делаются набором блоков, а не набором видов.
#Какие модули обычно нужны теме
header шапка
footer подвал
menu меню
menuItem пункт меню
page страница
block свободный блокПлюс те, что приносят решения: portfolio, reviews, faq,
form_block, blog. Полный список модулей сайта — раздел Модули в
панели.
#Что ещё подставляется в вёрстке
| Метка | Что подставит |
|---|---|
{setting.phone} | значение из «Настройки сайта» |
{module.имя} | другой модуль — так шапка попадает на страницу |
{PFM.title} | поле текущей страницы |
{pager} | листалка, если у блока включена постраничность |
Неподставившееся вычищается: забытая метка не вылезет на сайт — но и не сработает.
#Пример: карточка с картинкой под разные экраны
<article class="work">
<picture>
<source srcset="/uploads/m/{module.portfolio.kartinka_name}-m.webp"
media="(max-width: 640px)">
<img src="{module.portfolio.kartinka}" alt="{module.portfolio.zagolovok}">
</picture>
<h3>{module.portfolio.zagolovok}</h3>
<p class="work__price">{module.portfolio.cena}</p>
</article>Поля, пришедшие из файлов (…_path, …_name), подставляются уже
закодированными: пробел в имени файла иначе ломает srcset целиком.
Заголовки и тексты не кодируются — в них может быть нужная разметка.