06.09.2013

Вывод товаров для «homut.ru»

Задача

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

Решение

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

Также предусмотрена возможность выбора положения свойств с помощью стандартного поля "сортировка" Если сортировка = 1 (например, артикул), свойство выводится в начале таблицы Затем выводится название товара Если сорт <550 То свойство выводится между наименованием и ценой Если сорт > 550, то после полей "цена" и "купить".

Реализация

Решение было разработано с учетом концепции MVC. Сначала стандартный компонент "витрина товаров"(bitrix:catalog.section) возвращает массив всех товаров, которые предстоит вывести. Затем массив преобразуется в вид, удобный для вывода. Т.к. не все свойства присутствуют у каждого товара, то сначала необходимо сформировать список свойств, которые будут выведены в таблице. Для этого цикл по всем товарам составляет массив всех свойтв, в это же время определяются: русское название свойства, положение. Возникает проблема: когда свойства нет в первом товаре, из второго оно добавляется в конец списка свойств. Поэтому далее нужно отсортировать полученный массив по свойству "Сортировка" и поставить первым трем свойствам метку о том, что они выводятся по умолчанию.

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

Сначала анализируется добавленнок свойство "таблица". Товары группируются по этому свойству и выводятся в разных таблицах как показано на скриншоте. Поэтому итоговый массив товаров представляет собой список элементов вида "номер таблицы => список элементов"

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

В самом шаблоне элемента находится только непосредственный вывод html-кода таблицы. Сначала формируется заглавная строка таблицы, а после выводятся остальные строки.

Т.о был реализован вывод элементов каталога