Кабинет
Как устроены шаблоны

#Настройки и демо-данные

#settings — поля, которые правит владелец

Тема объявляет, какие поля нужны её вёрстке. При установке они заводятся в «Настройки сайта», и владелец правит их сам, не трогая разметку.

"settings": [
  { "name": "phone",   "title": "Телефон", "type": "phone" },
  { "name": "address", "title": "Адрес",   "type": "text" }
]

В вёрстке — {setting.phone}.

Важно

Вбивать телефон прямо в html нельзя. Тогда владелец меняет его правкой шаблона, и настройки теряют смысл. Хорошая тема не содержит ни одного контакта в разметке.

#Занятые имена

Имена id и domain использовать нельзя: это служебные столбцы каждой таблицы, а domain вдобавок означает разграничение сайтов и выбрасывается перед подстановкой. Настройка с таким именем заводилась бы «успешно» и не читалась никогда.

Для адреса сайта берите site_url:

{ "name": "site_url", "title": "Адрес сайта без слеша на конце", "type": "text" }

и в шапке:

<link rel="canonical" href="{setting.site_url}{PFM.url}">

Тогда при переезде на свой домен владелец правит одно поле в панели, а не шаблон.

#demo.json — примеры содержимого

Тема на пустом сайте выглядит сломанной: справочники пусты. Это чинит demo.json.

{
  "dictionaries": {
    "portfolio": [
      { "zagolovok": "Кухня 12 м²", "tag": "Кухни", "cena": "450000" }
    ],
    "reviews": [
      { "name": "Анна", "text": "Сделали в срок", "rating": "5" }
    ],
    "forms": [
      { "title": "Заявка", "code": "zayavka", "button": "Отправить", "active": 1 }
    ],
    "form_fields": [
      { "form_id": "@forms:code=zayavka", "code": "name",
        "name": "Как вас зовут", "type": "text", "sort": 1 }
    ]
  },
  "settings": {
    "phone": "+7 (495) 000-00-00",
    "address": "г. Москва, ул. Строителей, д. 12"
  }
}

#Ссылка на другую запись

Пишется как "@справочник:поле=значение" — например @forms:code=zayavka. Номера записей у каждого сайта свои, и подставить их в файл нельзя.

#Четыре правила, которые стоит знать заранее

  1. Демо кладётся только в ПУСТОЙ справочник. Это касается почти всех поставляемых решений: portfolio несёт 4 записи, reviews — 3, faq — 4, form — 17. На свежем сайте эти справочники уже не пусты, и демо темы к ним не применится.
  1. Это защита, а не ошибка. Но если теме важны именно её записи, рассчитывать на demo.json для таких справочников нельзя — либо владелец чистит справочник и жмёт «Импортировать демо-данные», либо тема живёт с примерами решения.
  1. Данные помечаются принадлежащими теме, поэтому кнопку можно нажимать повторно: правленые записи не трогаются.
  1. Один справочник наполняет кто-то один. Если решение везёт свои примеры, а тема — свои, кладёт пришедший первым (обычно решение). В отчёте будет сказано: «справочник уже наполнен (N записей) — примеры темы для него не клались».
Частая ошибка

Довод здесь не про механику. Примеры решений написаны под конкретную отрасль: faq и reviews из поставки — про ремонт квартир. Тема книжного дизайнера получит вопрос «Кто покупает материалы?» и отзыв про переделанную проводку, и заметит это только тот, кто откроет сайт после установки. Тема при этом выглядит установленной правильно.

Отсюда правило сборки, и у него две половины:

  • в demo.json кладите примеры для справочников, которых не касается ни одно решение;
  • а если теме нужны свои записи там, где справочник наполняет решение, — везите свой справочник, а не пытайтесь перебить чужой.