Создание каталога товаров (catalog)

Введение

В статье разберем как создать каталог с фильтрами на базе платформы Falcon Space.
Компонент каталог позволяет быстро поднять типовой каталог с использованием только MS SQL и верстки Bootstrap. 
 
См. также HOWTO по каталогу catalog

Как выглядит каталог

Вид каталога (страница категории):
 
Альтернативный вид товаров в категории (панели):
 
Карточка товара: 
 
Корзина и заказ: 
             
 

Возможности каталога

Каталог в решении Marketplace имеет следующие возможности: 

Адрес демо https://marketplace.web-automation.ru/catalog

Структура базы данных под каталог 

Основная номенклатура товаров хранится в as_cat_products. Товары могут находиться в различных категориях (as_cat_categories). У категории есть свои атрибуты (они представлены в каталоге фильтрами) - as_cat_filters. Фильтры могут быть различных типов - текстовый, галочки, выбор, переключатель, диапазон (as_cat_filterTypes).

У товаров есть атрибуты (as_cat_productAttrs) и они соответствуют атрибутам категории (as_cat_categoryFilters). У каждого товарного предложения поставщика есть набор кастомизируемых атрибутов - майка синяя, красная, XL, S (as_cat_supplierProductAttrs). 

Каждый поставщик (as_cat_suppliers) связан с определенными категориями каталога (as_cat_supplierCategories) и размещает в каталоге свои товары (as_cat_supplierProducts), связанные с единой номенклатурой. Поставщик использует общую номенклатуру и только указывает свои остатки и стоимость для определенной конфигурации атрибутов товара. 

Корзина хранится в ord_carts, а заказы - в ord_orders.

Построение адресов URL каталога

Построение URL для поиска

Адрес поиска строится следующим образом /catalog/[catName-catID]/[catName-catID]/f/[filterCode-val1,val2...]/[filterCode-val1,val2...]

Блоки с категориями показывают вложенность категорий. 

Параметр /f/ говорит системе, что дальше в адресе идет блок фильтров (а перед этим шли категории). Значения фильтров указываются через запятую. 

Пример адреса для поиска: 

https://marketplace.web-automation.ru/catalog/spectekhnika-1012/pogruzchiki-1014/f/gruzopod_emnost-до%20300%20кг,до%20400%20кг/sostoyanie-Б-у

https://marketplace.web-automation.ru/catalog/spectekhnika-1012/ekskavatory-1015

Примечание: 

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

Адрес товара строится следующим образом  /catalog/[сatName-catID]/[catName=catID]/p/[prodName-prodID]

В начале адреса идет иерархия категорий, в которых находится товар. 

Параметр /p/ говорит системе, что это товар (а не вывод товаров в какой-то категории). 

После /p/ идет блок с идентификацией товара по prodID (as_cat_products.id).

Примечание: 

Пример адреса товара: https://marketplace.web-automation.ru/catalog/spectekhnika-1012/pogruzchiki-1014/p/pogruzchik-honda-1155-1155

Управление бизнес-логикой и видом каталога

Управление логикой работы каталога осуществляется на странице /catsettings (доступна системному администратору)

На данной странице вы можете: 

Атрибуты продуктов (фильтры)

Все возможные атрибуты продуктов лежат в as_cat_filters.

Атрибуты назначаются категории в таблице as_cat_categoryFilters, а продукты уже в свою очередь наследуют атрибуты всех родительских категорий.

Тип данных значений атрибута указывается в dataTypeID (строка, целое число, дробное число).

Заполнение атрибутов значениями для конкретного продукта идет в as_cat_productAttrs.

В этой таблице заполняется одна из трех колонок согласно установленному типу атрибута.

Значение Атрибута как выбор значения из списка (справочника)

Если на атрибуте заполнено поле sqlGetValues, значит он имеет конечное число установленных значений, и для каждого продукта будет выбор из списка одного из этих значений. В sqlGetValues указана хранимая процедура для выбора списка значений атрибута. Однако, если в системе реализована процедура cat_filter_getFilter, то все заполнения значений фильтров типа списки будет выполняться через нее. 

Соответственно в БД необходимо создать дополнительные таблицы-справочники по таким атрибутам в виде as_cat_cust_{имяАтрибута} (id, name). 

В as_cat_productAttrs тогда будет заполнена колонка intValue - ID записи из таблицы указанной в sqlGetValues.

Атрибуты как фильтры

Атрибуты продуктов должны также быть среди фильтров поиска.

Поле visibleInFilter определяет будет ли введен атрибут в перечень фильтров.

Есть следующие типы фильтров в каталоге:

Поле typeID определяет тип фильтра.
Если вариант отображения - ползунок, то поле defValue необходимо обязательно заполнить по следующему шаблону - {минимум,максимум,шаг}
Для фильтра select необходимо в начале добавить элемент Не выбрано.
Чтобы назначить каждой категории свой набор фильтров, нужно прописать связи в as_cat_categoryFilters

Атрибуты отображаемые на обложке продукта

Если на атрибуте заполнен признак showForProductInList, то этот атрибут будет выводиться сразу на обложке товара в режиме отображения товаров Список

Добавление продуктов в корзину

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

Таблица корзин ord_carts. Если пользователь не авторизован, то поле username в ней будет равно null.
В таблице ord_cartItems лежат позиции, которые были добавлены в корзину.

О таблице ord_cartTypes

В ней лежит настройка того, какая корзина работает на каталоге

В поле cartInfoFormat можно задать формат вывода виджета корзины справа сверху на сайте.

Оформление заказа

Форма с кодом cartOrder, т. е. можно посмотреть её хранимки, и соответственно есть возможность её видоизменить.
В SaveItem прописано создание заказа. Все заказы хранятся в ord_orders, и через таблицу корзины выходят на позиции заказа (они же позиции корзины).

Как сделать, чтобы оформлялся единый заказ?

Добавление продуктов в Избранное

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

Адрес Избранного /favorites

Хранимые процедуры каталога 

Подготовка фильтров при поиске cat_preSearch (обычно ее не требуется менять)

На входе: 

На выходе:

SELECT 1 - выдает список категорий id, code, name, level, parentID, icon

SELECT 2 - выдает информацию о фильтрах id, title, tooltip, code, defValue, sqlGetValues, cacheMinutes, typeCode, commaSelected

SELECT 3 - выдает информацию о вложенных категориях id, code, name, level, parentID, icon.

Поиск по каталогу - cat_search

На входе: 

На выходе: 

SELECT 1  Товары

SELECT 2 Настройки вывода 

SELECT 3 - Атрибуты товара, которые будут выводиться в поиске

SELECT 4 - Виды сортировок

SELECT 5 - Состояния фильтров. Работают, если установлен FilterStateEnabled = 1. На базе этих данных в фильтрах отображается сколько товаров есть по данному фильтру при текущей конфигурации выбранных фильтров. 

SELECT 6 - состояния категорий. Можно скрыть категории, а также установить количество у категории (выводится справа от категории). 

Настройка SEO параметров для поиска - cat_search_getSeoParameters.

На входе: 

На выходе: 

нет выходных SELECT

Получить детали для карточки товара - cat_getItem

На входе: 

На выходе: 

SELECT 1 Настройки вывода 

SELECT 2 Категории товара (иерархия)

SELECT 3 Атрибуты

SELECT 4 Предложения поставщиков

Настройка SEO параметров для карточки товара - cat_getItem_getSeoParameters

На входе: 

На выходе: 

нет выходных SELECT

Управлять этими процедурами можно на /catSettings

Страница-источник на сайте falconspace.ru