Любой товар содержит в себе определенную атрибутику, благодаря которой он может быть классифицирован, определено его назначение или потребительский спрос. К атрибутике относится множество таких атрибутов как цвет, материал, размеры, форма, электрические параметры и т.п.
Покупатели, как правило, используют атрибуты для сравнения схожих друг с другом товаров, чтобы определиться, какой из них лучше и доступный по цене. Немаловажным также является и поиск товаров по их атрибутам, однако в OpenCart по умолчанию это не предусмотрено. Решением может стать модуль фильтрации товаров по их атрибутам Attfilter.
Покупатели, как правило, используют атрибуты для сравнения схожих друг с другом товаров, чтобы определиться, какой из них лучше и доступный по цене. Немаловажным также является и поиск товаров по их атрибутам, однако в OpenCart по умолчанию это не предусмотрено. Решением может стать модуль фильтрации товаров по их атрибутам Attfilter.
Ключевые возможности:
- Сгруппированный и отсортированный фильтр в виде динамического выпадающего списка (эффект slideToggle).
- Передача параметров фильтра только через Cookies, чистый URL.
- Фильтрация в автоматическом и ручном режимах.
- Параллельная работа с базовыми фильтрами (сортировка, поиск, нумерация страниц).
- Запоминание состояния фильтра для каждой отдельной категории.
- Минимальное количество запросов к базе, максимум до 3-х запросов за одно обращение.
- Скрытие атрибутов в фильтре отрицательным значением сортировки.
Рассмотрим некоторые пункты подробно. Передача параметров через Cookies выбрана неслучайно, это позволяет, в некоторой степени, защититься от веб-скрапинга; запоминать состояния фильтра и оптимизировать алгоритм работы самого фильтра. От использования технологии Ajax решено было отказаться в пользу корректной работы других модулей, в том числе базовых функций (п.4), а также из соображений экономии ресурсов сервера (об этом ниже).
Основная проблема любых модулей OpenCart в том, что они начинают работать после выполнения запросов базовых моделей, т.е. модули начинают выполнять типовые операции, которые в процессе уже участвовали, другими словами, создаётся избыточная нагрузка на сервер. Например, почему бы не отфильтровать те же товары на этапе формирования самой страницы, изменив соответствующие условия в запросах к БД базовых моделей? Когда речь идёт о собственном проекте с высокой нагрузкой именно так и делают, модули здесь неуместны. Но тогда придётся забыть об официальных обновлениях, поскольку базовый код уже будет модифицирован, а это не каждого устраивает. Модуль Attfilter является в данном случае компромиссом, в нём применена "технология" Class Override, что позволяет свести изменения в базовом коде ПО OpenCart к минимуму (см. инструкция по установке, п.3).
![]() |
Рисунок 1. Настройка модуля Attfilter v1.0 в панели администрирования OpenCart |
![]() ![]() ![]() |
Рисунок 2. Внешний вид колонки фильтра. Слева исходное состояние; посередине выбор параметра; справа результат применения. |
В зависимости от настроек, колонка фильтра может быть с полностью раскрытыми списками, а также с показом количества товарных позиций (см. рисунок 1 и рисунок 2). Жирным шрифтом представлены группы атрибутов, а сами атрибуты в виде выпадающих списков. Атрибуты и их группы выстраиваются согласно порядку сортировки, который указывается в панели администрирования OpenCart. Неактуальные атрибуты, например с объёмным текстом описания, могут быть скрыты отрицательным значением сортировки.
Как уже упоминалось ранее, состояние фильтра, в том числе раскрытые списки, запоминаются для каждой категории отдельно. В любой момент фильтр может быть сброшен нажатием соответствующей кнопки или после закрытия браузера.
Требования к сайту:Как уже упоминалось ранее, состояние фильтра, в том числе раскрытые списки, запоминаются для каждой категории отдельно. В любой момент фильтр может быть сброшен нажатием соответствующей кнопки или после закрытия браузера.
- OpenCart v1.5+ или ocStore v1.5+
- jQuery v1.6+ (по-умолчанию присутствует)
- jQuery Cookie plugin (по-умолчанию присутствует)
- Распаковать архив и скопировать содержимое в корневую директорию сайта (./).
- В индексном файле ./index.php после строки $controller = new Front($registry); добавить $controller->addPreAction(new Action('module/attributes/startup'));.
- В модели ./catalog/model/catalog/product.php; необходимо переименовать класс ModelCatalogProduct в _ModelCatalogProduct.
./admin/controller/module/attributes.phpПредставленный список файлов необходимо поместить в каталог OpenCart согласно их директориям.
./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 без согласия авторов модуля или публикация его в общедоступном виде. Модуль возврату не подлежит!
Условия поддержки: Бесплатная поддержка в рамках базовой версии 1.x, в том числе выпуск возможных обновлений, осуществляется в течении года с момента приобретения через зарегистрированный электронный адрес, с использованием которого была осуществлена сделка. Изменение дизайна в поддержку не входит, но может быть выполнено как отдельная услуга.
Стоимость: $12
Эта статья может быть дополнена расширенной информацией, следите за обновлениями и комментариями. По вопросам приобретения просьба обращаться через страницу контактов.
У меня ocstore 2.1.0.1, Подойдёт?
ОтветитьУдалитьskype: evgeniy-uk
Нет, данное решение расчитано на версии 1.5+
Удалить