Содержание

Построение витрины

В данном разделе описана последовательность действий, необходимых для построения витрины и поддержания её в актуальном состоянии.

Получение меню

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

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

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

Получение списка доступных продуктов

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

Привязка продуктов к категориям

Ввиду большого количества похожих товаров в системе MONT было введено такое понятие как «Семейство» - логическая сущность для группировки продуктов. В каждом узле полученного ранее дерева есть поле FamilyGroupIds, содержащее список идентификаторов(ид) семейств, привязанных к этой категории. А у каждого продукта, полученного в предыдущем разделе с помощью GetPriceChanges, есть поле FamilyGroupId, в котором содержатся идентификатор семейства, к которому относится продукт. Если вы не хотите использовать семейства при построении своей витрины, пользуясь этими данными, вы можете выполнить привязку продуктов напрямую к категориям.

Построение актуального меню(алгоритм удаления пустых веток)

Базовое меню является общим для всех пользователей и основано на полном каталоге всех продуктов. В том числе и архивных. В таком виде оно годится только для создания библиотеки. А для интернет-магазина весь этот архив мало интересен. На витрине должны быть только те категории, в которых есть хотя бы 1 продукт доступный к продаже. К тому же уменьшение числа ветвей в меню сильно ускорит его отрисовку. Предлагаемый ниже алгоритм является одним из вариантов реализации этой задачи:

  1. Находим максимальный уровень вложенности меню по полю Level.
  2. В цикле от нижнего уровня меню к верхнему проверяем каждое семейство узла меню (все Id из поля FamilyGroupIds) на наличие его в списке продуктов:
  1. Если таких продуктов нет, то помечаем сам узел меню “на удаление”.
  2. Если FamilyGroupIds для узла является пустым, то ищем хотя бы одного потомка данного узла, не помеченного “на удаление”. Если таких потомков не найдено, помечаем узел меню “на удаление”.
  3. Удаляем все узлы, помеченные “на удаление”.

Список доступных стран

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

Для получения списка возможных стран нужно вызвать метод GetAvaliableCountries. Результатом будет список кодов стран.

Важно: стоит отметить тот факт, что понятие страны введено для определенных товаров, которые могут иметь в своем описании(к тому же на разных языках) фактичесие различия от страны к стране. Так как таких товаров немного, то наиболее распространенным кодом страны для всех переводов является код DF - Default. Это значит, что для товара, обладающим таким кодом страны все переводы на различные языки будут одинаковы вне зависимости от страны, за исключением отдельного описания товара с кодом страны не равным DF.

Например: есть описание товара ABC-1111 на RU языке для DF страны и описание для этого же товара на RU языке для UA страны(отличающееся фактически от DF страны).
Все запросы вернуть описание на RU языке для товара ABC-11111 вернут отписание RU-DF.
Например для страны KZ и языка RU - вернется описание RU-DF. Однако для страны UA и языка RU вернется описание RU-UA.

Получение описания семейств

Если при построении витрины вы не планируете пользоваться семействами, то этот раздел вы можете пропустить. Для получения описания одного семейства существует метод GetFamily, в который нужно передать идентификатор семейства, требуемые язык и страну(их получение было описано в начале раздела). Соответственно, для получения описания всех необходимых семейств, нужно вызвать этот метод для каждого семейства, которое есть в обрезанном от пустых веток меню.

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

Для получения описания одного продукта существует метод GetProduct, в который нужно передать партномер продукта, требуемые язык и страну(их получение было описано в начале раздела). Соответственно, для получения описания всех необходимых продуктов, нужно вызвать этот метод для каждого доступного вам продукта(их список был получен с помощью метода GetPriceChanges)

Обновление контента

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

Потому мы рекомендуем проверять наличие обновлений раз в 10 минут.

Рекомендуется производить обновление в 2 этапа - обновление меню и обновление описаний.

Обновление меню можно реализовать следующий образом:

  1. Проверка обновления структуры дерева. В результатах вызова метода GetMenu помимо самого меню содержится еще и его актуальная версия. Проверить наличие обновлений можно вызвав этот метод еще раз и сравнив новую версию со старой. Если новая версия больше - значит, что-то было изменено, и меню надо полностью обновить.
  2. Проверка изменения доступности товаров. Как её осуществить, подробно описано в разделе синхронизации цен на товары
  3. Если в пунктах 1 или 2 были обнаружены и синхронизированы какие-то изменения, то необходимо заново построить актуальное меню(описано выше)
  4. Если во вновь построенном актуальном меню появились новые семейства или продукты, то необходимо загрузить для них описания.

Обновление описаний можно реализовать следующим образом:

  1. Получение списка идентификаторов сущностей(семейств и продуктов), у которых изменились описания. Сделать это можно с помощью метода GetChanges
  2. Для каждой изменившейся сущности необходимо заново загрузить их описания.