30 октября 2013 г.

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

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

Ключевые возможности:
  1. Сгруппированный и отсортированный фильтр в виде динамического выпадающего списка (эффект slideToggle).
  2. Передача параметров фильтра только через Cookies, чистый URL.
  3. Фильтрация в автоматическом и ручном режимах.
  4. Параллельная работа с базовыми фильтрами (сортировка, поиск, нумерация страниц).
  5. Запоминание состояния фильтра для каждой отдельной категории.
  6. Минимальное количество запросов к базе, максимум до 3-х запросов за одно обращение.
  7. Скрытие атрибутов в фильтре отрицательным значением сортировки.
Рассмотрим некоторые пункты подробно. Передача параметров через Cookies выбрана неслучайно, это позволяет, в некоторой степени, защититься от веб-скрапинга; запоминать состояния фильтра и оптимизировать алгоритм работы самого фильтра. От использования технологии Ajax решено было отказаться в пользу корректной работы других модулей, в том числе базовых функций (п.4), а также из соображений экономии ресурсов сервера (об этом ниже).

Основная проблема любых модулей OpenCart в том, что они начинают работать после выполнения запросов базовых моделей, т.е. модули начинают выполнять типовые операции, которые в процессе уже участвовали, другими словами, создаётся избыточная нагрузка на сервер. Например, почему бы не отфильтровать те же товары на этапе формирования самой страницы, изменив соответствующие условия в запросах к БД базовых моделей? Когда речь идёт о собственном проекте с высокой нагрузкой именно так и делают, модули здесь неуместны. Но тогда придётся забыть об официальных обновлениях, поскольку базовый код уже будет модифицирован, а это не каждого устраивает. Модуль Attfilter является в данном случае компромиссом, в нём применена "технология" Class Override, что позволяет свести изменения в базовом коде ПО OpenCart к минимуму (см. инструкция по установке, п.3).

Параметры модуля Attfilter v1.0
Рисунок 1. Настройка модуля Attfilter v1.0 в панели администрирования OpenCart
Модуль рассчитан на показы в категориях как в режиме быстрого фильтра, когда каждый выбор параметра сопровождается обновлением результатов, так и в ручном режиме, когда пользователь может сам выбрать несколько условий и применить фильтр.

Колонка модуля Attfilter Колонка модуля Attfilter Колонка модуля Attfilter
Рисунок 2. Внешний вид колонки фильтра.
Слева исходное состояние; посередине выбор параметра; справа результат применения.
В зависимости от настроек, колонка фильтра может быть с полностью раскрытыми списками, а также с показом количества товарных позиций (см. рисунок 1 и рисунок 2). Жирным шрифтом представлены группы атрибутов, а сами атрибуты в виде выпадающих списков. Атрибуты и их группы выстраиваются согласно порядку сортировки, который указывается в панели администрирования OpenCart. Неактуальные атрибуты, например с объёмным текстом описания, могут быть скрыты отрицательным значением сортировки.

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

Требования к сайту:
  1. OpenCart v1.5+ или ocStore v1.5+
  2. jQuery v1.6+ (по-умолчанию присутствует)
  3. jQuery Cookie plugin (по-умолчанию присутствует)
Инструкция по установке (шаблон default):
  1. Распаковать архив и скопировать содержимое в корневую директорию сайта (./).
  2. В индексном файле ./index.php после строки $controller = new Front($registry); добавить $controller->addPreAction(new Action('module/attributes/startup'));.
  3. В модели ./catalog/model/catalog/product.php; необходимо переименовать класс ModelCatalogProduct в _ModelCatalogProduct.
Состав архива:
./admin/controller/module/attributes.php
./admin/language/english/module/attributes.php
./admin/language/russian/module/attributes.php
./admin/view/template/module/attributes.tpl
./catalog/model/catalog/attributes.php
./catalog/controller/module/attributes.php
./catalog/language/english/module/attributes.php
./catalog/language/russian/module/attributes.php
./catalog/view/theme/default/template/module/attributes.tpl
./catalog/view/theme/default/stylesheet/attributes.css
./catalog/view/theme/default/image/apply.png
./catalog/view/theme/default/image/drop_down.png
./catalog/view/theme/default/image/drop_up.png
./catalog/view/theme/default/image/reset.png
Представленный список файлов необходимо поместить в каталог OpenCart согласно их директориям.

Условия приобретения: Модуль может быть использован только в личных целях, не допускается распространение в составе ПО OpenCart без согласия авторов модуля или публикация его в общедоступном виде. Модуль возврату не подлежит!

Условия поддержки: Бесплатная поддержка в рамках базовой версии 1.x, в том числе выпуск возможных обновлений, осуществляется в течении года с момента приобретения через зарегистрированный электронный адрес, с использованием которого была осуществлена сделка. Изменение дизайна в поддержку не входит, но может быть выполнено как отдельная услуга.

Стоимость: $12

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

2 комментария:

  • RSS
  • Twitter
  • Youtube