Кабинет
Что такое справочники

#Связи между справочниками

Связь нужна, когда запись одного справочника ссылается на запись другого: статья → категория, товар → раздел, заявка → воронка.

Делается это полем типа «Выбор из справочника».

#Три настройки, а не одна

Выбрав тип «Выбор из справочника», вы получаете три поля подряд:

НастройкаВопрос, на который отвечаетПример
Справочниккуда смотримcategory
Что сохранятькакой столбец цели ляжет в базуid
Что показыватькакой столбец увидит человекtitle
Поля справочника: тип задаётся списком, у выборки появляются три настройки
Поля справочника: тип задаётся списком, у выборки появляются три настройки
Частая ошибка

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

#Два разных смысла связи

Различие тонкое, но именно оно решает, что писать в «что сохранять».

Ссылка на запись. Хранить id, показывать title. Так связаны пункт меню и меню, статья и категория. Название категории можно потом переименовать — связь не разорвётся, потому что хранится номер.

Выбор из перечня значений. Хранить name, показывать title. Так устроено поле «Тип Open Graph» у страниц: в базе лежит article, а человек видит «Статья». Здесь важно само значение, а не запись.

Что связываемчто сохранятьчто показывать
статья → категорияidtitle
пункт меню → менюidname
страница → тип OGnametitle

#Как вывести связанное в вёрстке

Модуль подставляет сохранённое значение:

<!-- если хранится id — выведется номер -->
<span>{module.blog.category}</span>

Чтобы показать название категории, а не её номер, есть два пути:

  1. хранить название — поставить «что сохранять» = title. Просто, но переименование категории разорвёт связь у старых записей;
  2. вывести отдельным блоком — модуль категорий с условием отбора по текущей записи.
Совет

Для отображаемых названий, которые редко меняются (теги, типы, состояния), проще хранить само значение. Для настоящих связей, где запись живёт своей жизнью, — хранить id.

#Отбор записей по связи

Связанное поле — обычный столбец, поэтому по нему работает отбор в вызове модуля:

{module.blog:category=3}
{module.portfolio:tag=Кухни}

#Связи, которые заводит решение

Решение описывает связь в манифесте тремя ключами — select, select_by, select_show, — и разрешает её вторым проходом: поле может смотреть на справочник, который то же решение заведёт ниже по списку.

Связь можно указать и на чужой справочник: тип Open Graph принадлежит ядру, а ссылаются на него и страницы, и записи блога.