Отношения (или зависимости)

Введение

Мы уже узнали, как определить, какой тип данных вы хотите хранить в системе, используя Типы и как определить, какие атрибуты будут у ваших объектов, используя помощь Атрибуты. Но есть много случаев, когда у вас есть отношения между объектами, например, когда ваше изображение связано с каким-то продуктом, или продукт как-то связан с другим продуктом и т.д. Вся эта информация может храниться в системе с помощью Relations.

Отношение определяет связь между двумя объектами, оно имеет направление, то есть начинается от какого-то объекта и идет к какой-то цели.

Определение главного изображения продукта

Давайте рассмотрим, как использовать отношения для определения главного изображения продукта. Мы уже научились загружать изображения в систему, подробности смотрите в разделе "Хранение активов (изображений, видео или других файлов)" главы "Типы". Теперь перейдем в Settings - Relations и добавим такое отношение:

.

Мы добавили отношение, в котором мы выбрали тип Product в качестве источника и тип Image в качестве цели. Таким образом, это связь продукта с изображением.

Теперь перейдем к типу продукта и определим, что это отношение используется для основного изображения.

.

Мы использовали кнопку , чтобы указать, что эта связь предназначена для изображений, и кнопку , чтобы указать, что это основной продукт изображения.

После этого мы можем перейти в область Work и связать какое-либо загруженное изображение с товаром в качестве основного изображения. Сначала выберите нужный продукт и перейдите на вкладку Links From, там вы увидите отношения Main Image. Сейчас оно пустое.

.

Нажмите на кнопку с плюсом и используйте кнопку , чтобы выбрать существующее загруженное изображение. Не забудьте нажать на кнопку , чтобы сохранить изменения. В результате у вас появится изображение, связанное с этим продуктом, и оно будет основным изображением продукта, поэтому оно будет отображаться в области заголовка продукта.

Ассоциирование дополнительных изображений с продуктом

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

.

Обратите внимание, что мы выбрали опцию Can be more then one, чтобы мы могли связать несколько дополнительных изображений с одним и тем же продуктом. У нас также есть тип Product в качестве источника и тип Image в качестве цели.

Теперь мы также должны перейти к соответствующему типу и определить, что эта связь используется для изображений.

.

После этого мы можем перейти к любому товару и связать с ним изображения (которые мы предварительно загрузили в систему).

.

Все связанные файлы и изображения также видны на вкладке Media Files.

Привязка других файлов к продукту

Мы можем назначить продукту не только изображения, но и другие типы файлов. Давайте определим, например, отношения для документации и сертификации.

Сначала мы должны определить отношение так же, как и для изображений:

.

Это отношение для Documents. Оно имеет источник - продукт и файл в качестве цели. Кроме того, к товару в качестве документа может быть прикреплено более одного файла.

.

А это аналогично, но для сертификатов.

Итак, теперь мы можем прикрепить к нашему продукту файлы разных типов

И эти файлы также будут видны на вкладке Media Files.

Ассоциирование файлов с другими объектами (не только с товарами)

Мы покажем на примерах, как установить отношение (связь) между продуктом и любым файлом или изображением. Но основная идея заключается в том, что продукт - это просто некоторый тип в системе. Таким образом, вы можете использовать тот же подход для связи файлов или изображений не только с продуктами, но и с любыми другими объектами в системе.

Например, можно связать изображения с категориями в системе (Уровень 1, Уровень 2 и Уровень 3 в нашей модели данных). Или мы можем загрузить в систему бренды как отдельный тип и связать с ним маркетинговые материалы, такие как логотип бренда, брошюры и т.д.

Мы можем определить отношения между файлом и любым другим объектом в системе, или даже отношения между файлами. Просто определите, что является исходным типом, а что целевым.

Кнопка загрузки файла

Поэтому, когда вы хотите присвоить какое-то изображение или любой другой файл товару или другому объекту в системе, вы должны сначала создать объект, который будет содержать файл, затем загрузить в него файл, а затем связать объект файла с товаром (или другим объектом)... Но это не очень удобно.

В системе есть специальный функционал, который позволяет выполнить все эти действия за одну операцию. После определения связи с файлом вы увидите на соответствующем объекте кнопку "Загрузить файл" которая позволяет создать, загрузить и присвоить файл или изображение:

После нажатия на эту кнопку вы увидите следующее диалоговое окно:

.

В нем вы должны указать, какой файл загрузить, какой тип отношения использовать для связи с объектом, и где разместить созданный файловый объект. После нажатия на кнопку Upload в указанном месте будет создан файловый объект, в него будет загружен файл, который будет связан с этим объектом.

Связывание продуктов с дополнительными иерархиями

В систему можно загружать дополнительные иерархии, обратитесь к разделу "Множественные иерархии" главы "Типы".

Но нам также необходимо связать продукт с соответствующими категориями. И для этого мы должны определить отношение:

.

Обратите внимание, что мы выбрали Категория 2 уровня и Категория 3 уровня в качестве источника и Product в качестве цели, что означает, что мы сможем связать продукты с любой категорией на этих двух уровнях. Мы также выбрали опции Visible as child (чтобы отображать продукты в категории в дереве объектов) и Can be more than one (чтобы иметь возможность связать более одного продукта с категорией).

Теперь мы можем перейти к нужной категории и увидеть следующее отношение:

.

Мы можем добавить какой-либо продукт в качестве цели и увидим, что он связан с категорией:

.

Как мы видим, этот продукт также отображается в дереве объектов как дочерний для этой категории благодаря опции Visible as child.

Отношения между продуктами

Мы часто сталкиваемся со случаями, когда продукт может быть связан с другим продуктом. Например, продукт может быть заменой для другого продукта, и вы хотите сохранить эту информацию в PIM. Или некоторые элементы могут быть запасной частью для какого-то продукта, и опять же нам нужно сохранить эту информацию в системе. И так далее, у нас может быть множество различных типов зависимостей между продуктами.

И мы можем использовать отношения для хранения такого рода информации. Давайте создадим отношение для хранения замены продуктов:

.

Мы создали отношение между одним продуктом и другим и назвали его "Замены".

После этого мы можем перейти к любому продукту и добавить другой продукт в качестве замены.

У нас есть Product в качестве источника ссылки, поэтому мы можем видеть все цели на вкладке Links From. И мы можем видеть соответствующие источники также из целевого продукта Product 2, но на вкладке Links To.

Таким образом, мы можем моделировать любые отношения между продуктами или любыми другими объектами в системе.

Атрибуты отношений

Представим, что мы хотим хранить склады в системе, а также хранить продукты, которые у нас есть на этих складах. Таким образом, нам придется создать соответствующие типы складов:

.

А затем мы можем создать данные склады:

.

После этого нам нужно будет создать отношение, чтобы связать товар со складом:

Теперь мы можем связать продукты со складами:

.

А теперь мы хотим хранить не только ссылку на склад, но и запасы продуктов на каждом складе. Это означает, что мы не можем иметь атрибут для хранения уровня запасов на уровне продукта, потому что запасы продукта различны для каждого склада. Также мы не можем иметь этот атрибут на складе, потому что на каждом складе может быть несколько товаров.

Мы должны определить атрибут на связи между продуктом и складом. Как это сделать? Создадим атрибут Stock Level, но переключимся на вкладку For Relations и выберем связь, в которой мы хотим видеть этот атрибут.

.

После этого мы увидим этот атрибут в самом отношении. И мы сможем определить уровень запасов для каждого товара на каждом складе.

Комплекты и компоненты

Еще один случай использования отношений - это функциональность комплектов и компонентов. Мы часто имеем комплект, который представляет собой продукт, состоящий из других продуктов. Таким образом, мы можем смоделировать это как отношение между продуктами, где полный продукт будет источником, а входящие в него продукты - целями.

Кроме того, нам может понадобиться хранить количество продуктов для набора, если в наборе может быть несколько одинаковых продуктов. И сохранять порядок продуктов в наборе.

Поэтому создадим отношение Components, в котором будем хранить составляющие продукты:

.

И два атрибута для хранения количества продуктов и их упорядочивания внутри набора:

Итак, теперь мы можем определять комплекты в нашей системе и иметь количество продуктов и заказ в качестве атрибутов:

Порядок отношений на представлении продукта

Теперь у нас есть следующие отношения на представлении продукта:

.

Что если мы хотим изменить порядок, в котором будут выглядеть эти отношения? Например, мы хотим получать Сертификаты перед Документацией (а не после, как сейчас).

У нас есть возможность определить порядок, в котором будут отображаться отношения. Нам нужно перейти в Настройки и изменить порядок отношений.

.

Мы должны установить 3 для Сертификатов и 4 для Документации. В результате мы получим желаемый порядок:

.

Важно, что эта конфигурация порядка будет применена и к вкладке Медиафайлы, поэтому вы увидите медиафайлы в том же порядке.

Визуальные опции для отношений

Теперь у нас есть множество отношений, определенных для наших продуктов:

.

Но иметь их в списке без визуального разделения не очень удобно. Мы можем определить заголовок и разделить их:

.

Это возможно с помощью двух опций:

  • title - определяет заголовок, который будет виден перед данным отношением
  • style - стиль CSS, который будет применен к этому компоненту отношения.

Вот пример того, как это выглядит:

Заключение

Мы рассмотрели возможные варианты использования отношений. Но это далеко не полный список. Вы можете смоделировать любые отношения между любыми объектами в системе и прикрепить к ним атрибуты.

Например, мы можем определить тип Brand, который будет хранить сущность бренда с сопутствующими атрибутами, такими как название, изображения, описание и т.д. И мы можем установить связь между брендом и продуктом, чтобы показать продукты под этим брендом.

И так далее, вы можете иметь много примеров в реальной жизни, когда у вас есть различные объекты в системе и связь между ними.