Сортировка по производителю внутри категории Virtuemart
Время от времени сталкивался с необходимостью сделать вывод товаров внутри категории в разрезе производителей, т.е. сделать так чтобы при изучении какой-либо категории потенциальный покупатель интернет-магазина мог быстро отфильтровать товары одного производителя. Ранее после недолгого поиска решения я отказывался от этой идеи, т.к. мозг рисовал мне какие-то сильно громоздкие конструкции, и решал вопрос создавая лишний категории созвучные с производителями. В этот раз я пошел до конца!
Для начала пришлось немного рихтонуть стандартный модуль VirtueMart Manufacturers (mod_virtuemart_manufacturers). Ищем файлик shop_browse_queries.php и находим его по адресу administrator/components/com_virtuemart/html/, после чего вносим небольшие изменения, а именно после фразы:
// GET ALL PUBLISHED PRODUCTS FROM THAT MANUFACTURER if (!empty($manufacturer_id)) { $table_names .= ',`#__{vm}_product_mf_xref`'; $where_clause[] = "manufacturer_id='".$manufacturer_id."'"; $where_clause[] = "`#__{vm}_product`.`product_id`=`#__{vm}_product_mf_xref`.`product_id` "; }
пишем
if (!empty($category_id)) { $where_clause[] = "#__{vm}_product_category_xref.category_id='".$category_id."'"; }
Далее правим файл mod_virtuemart_manufacturers.php, который ищем в /modules/mod_virtuemart_manufacturers. В этом файле кусок
URL."index.php?option=com_virtuemart&page=shop.browse&manufacturer_id=". $manufacturer->manufacturer_id )
меняем на вот такую конструкцию
URL."index.php?option=com_virtuemart&page=shop.browse&category_id=$category_id&manufacturer_id=". $manufacturer->manufacturer_id )
Вот собственно все и заработало. Однако, не все оказалось так просто. Подлый Virtuemart выводил сортировку по производителям на всех страницах магазина, а я согласен был только на страницы категорий и, возможно, на страницы товаров. Я уж молчу о том, что на странице, например, с регистрационной формой магазина сортировка по производителю выглядит неуместно.
Пришлось подумать как заставить модуль появляться только в тех местах, где его появление уместно. Оказалось, что методов этих есть некоторое количество. Я остановился на Advanced Module Manager, который путем нехитрых настроек заставляет модуль появляться только на тех страницах Virtuemart и Joomla, где в этом есть необходимость.