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

#Своё решение темы

Иногда нужного решения не существует. Системное «Портфолио» писалось под ремонт: заголовок, тег, цена, картинка. У книжного дизайнера работа — это издание с клиентом, годом и задачей, и втискивать её в «цену» строкой 2024 · дизайн, вёрстка значит отнять у владельца возможность править содержимое, не трогая вёрстку.

Поэтому тема вправе привезти своё решение — со своим справочником, своими полями и своим модулем.

#Как это выглядит в архиве

moya-tema.zip
  theme.json
  packages/
    moya-tema-portfolio/
      manifest.json
{
  "code": "moya-tema",
  "version": "1.0.0",
  "bundled_packages": ["moya-tema-portfolio"],
  "views": [
    { "module": "moya_folio", "code": "moya-tema.folio",
      "html": "<div class=\"folio\">{item}</div>",
      "item_html": "<b>{module.moya_folio.title}</b>" }
  ]
}

Манифест решения — обычный манифест Wacis:

{
  "name": "Работы",
  "code": "moya-tema-portfolio",
  "version": "1.0.0",
  "core_version": ">=1.0.0",
  "dictionaries": [
    { "name": "moya_folio", "title": "Работы", "fields": [
      { "name": "title",     "title": "Издание", "type": "text" },
      { "name": "zakazchik", "title": "Клиент",  "type": "text" },
      { "name": "god",       "title": "Год",     "type": "text" }
    ]}
  ],
  "modules": [
    { "name": "moya_folio", "title": "Работы", "type": "BFM",
      "dictionary": "moya_folio",
      "box_layout": "<div class=\"folio\">{item}</div>",
      "item_layout": "<b>{module.moya_folio.title}</b>" }
  ]
}

#Правила, о которые чаще всего спотыкаются

  • Код решения начинается с кода темы и дефиса. moya-tema-portfolio — да, portfolio — отказ. Иначе две темы с похожими решениями столкнутся на одном сайте, и вторая перепишет справочник первой.
  • Код внутри manifest.json совпадает с объявленным в bundled_packages. Расхождение — отказ на установке.
  • Список, даже если решение одно: ["moya-tema-portfolio"], не строкой.
  • Кода по-прежнему нет. В packages/ можно класть только manifest.json; .php внутри отклоняется так же, как в самой теме.
  • core_version со знаком: ">=1.0.0".

#Порядок установки

  1. ставятся решения темы (bundled_packages);
  2. добираются требуемые (requires_packages);
  3. укладываются виды.
Важно

Порядок здесь не для стройности: вид ищет модуль по имени. Уложи его раньше — модуля ещё нет, вид не ляжет, и тема встанет с пустым блоком.

#Что происходит с чужим

Чужое не трогается. Если на сайте уже стоит системное portfolio с сотней записей, тема ставит своё рядом, под своим кодом и со своим справочником. Заменить чужое значило бы потерять чужие данные ради оформления.

#Обновление и снятие темы

ДействиеЧто с решением темы
обновление темыструктура догоняется: новые поля, новые модули. Записи не трогаются никогда
снятие темырешение и его записи остаются
оборванная установкасвоё поставленное снимается обратно; стоявшее до темы не трогается
Почему так

Справочник привезла тема, но сто работ в нём завёл владелец — это содержимое сайта, а не оформление. В отчёте о снятии будет сказано, что решение осталось; снять его отдельно можно в Marketplace.