#Связи между справочниками
Связь нужна, когда запись одного справочника ссылается на запись другого: статья → категория, товар → раздел, заявка → воронка.
Делается это полем типа «Выбор из справочника».
#Три настройки, а не одна
Выбрав тип «Выбор из справочника», вы получаете три поля подряд:
| Настройка | Вопрос, на который отвечает | Пример |
|---|---|---|
| Справочник | куда смотрим | category |
| Что сохранять | какой столбец цели ляжет в базу | id |
| Что показывать | какой столбец увидит человек | title |

Заполнять нужно все три. Поле с незаданным «что сохранять» заводится «успешно» и ломает сайт: пустое имя столбца попадает в список полей запроса, и каждая страница, где читается этот справочник, отвечает ошибкой базы. Так дважды ложились все сайты разом.
#Два разных смысла связи
Различие тонкое, но именно оно решает, что писать в «что сохранять».
Ссылка на запись. Хранить id, показывать title. Так связаны
пункт меню и меню, статья и категория. Название категории можно потом
переименовать — связь не разорвётся, потому что хранится номер.
Выбор из перечня значений. Хранить name, показывать title. Так
устроено поле «Тип Open Graph» у страниц: в базе лежит article, а
человек видит «Статья». Здесь важно само значение, а не запись.
| Что связываем | что сохранять | что показывать |
|---|---|---|
| статья → категория | id | title |
| пункт меню → меню | id | name |
| страница → тип OG | name | title |
#Как вывести связанное в вёрстке
Модуль подставляет сохранённое значение:
<!-- если хранится id — выведется номер -->
<span>{module.blog.category}</span>Чтобы показать название категории, а не её номер, есть два пути:
- хранить название — поставить «что сохранять» =
title. Просто, но переименование категории разорвёт связь у старых записей; - вывести отдельным блоком — модуль категорий с условием отбора по текущей записи.
Для отображаемых названий, которые редко меняются (теги, типы,
состояния), проще хранить само значение. Для настоящих связей, где
запись живёт своей жизнью, — хранить id.
#Отбор записей по связи
Связанное поле — обычный столбец, поэтому по нему работает отбор в вызове модуля:
{module.blog:category=3}
{module.portfolio:tag=Кухни}#Связи, которые заводит решение
Решение описывает связь в манифесте тремя ключами — select,
select_by, select_show, — и разрешает её вторым проходом: поле может
смотреть на справочник, который то же решение заведёт ниже по списку.
Связь можно указать и на чужой справочник: тип Open Graph принадлежит ядру, а ссылаются на него и страницы, и записи блога.