Сортировка товара по нескольким производителям - Virtuemart 1.1.x (используем чекбокс)
Решений сортировки по производителю в категории Virtuemart, в настоящий момент, в рунете масса, но все они ориентированы на построение по принципу выпадающего списка select. Например так:
Я считаю, что это не является полноценной сортировкой. Клиент может захотеть просмотреть все товары сразу двух производителей, а при подобной реализации этого сделать не удастся. Поэтому было решено делать сортировку на основе чекбоксов.
Обращаю внимание, что в данной статье речь идёт о сортировке по производителям в категории, а не вообще по всему магазину.
Когда передо мной встаёт какая-либо задача по доработке, я первым делом сканирую интернет на предмет присутствия оной. Глупо писать всё с нуля, если кто-то уже делал подобное. В процессе поиска решения для данной модификации я вышел на http://joomlaforum.ru/, где было описано решение сортировки именно по способу с выпадающим списком. Тема с описанием - . Именно данный способ лёг в основу моей доработки.
Работы проводились над Virtuemart 1.1.9, в предыдущих версиях всё аналогично, разве что могут отличаться номера строк кода, поэтому ищите код, который нужно менять, по содержимому.
// 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` ";
}
Меняем на:
// GET ALL PUBLISHED PRODUCTS FROM THAT MANUFACTURER
$control = @$_REQUEST['manufacturer_id'][0];
if (!empty($control)) {
$table_names .= ',`#__{vm}_product_mf_xref`';
$mass = @$_REQUEST['manufacturer_id'];
$where = "manufacturer_id IN (";
foreach($mass as $ID) {
if (!next($mass)) {
$where .= "'".$ID."'";
}
else {
$where .= "'".$ID."', ";
}
}
$where .= ")";
$where_clause[] = $where;
$where_clause[] = "`#__{vm}_product`.`product_id`=`#__{vm}_product_mf_xref`.`product_id` ";
}
Строку 319:
$where_clause[] = "`product_parent_id`=0 ";
Меняем на:
$where_clause[] = "((`product_parent_id`='0') OR (`product_parent_id`='')) ";
Скачиваем файл, прикреплённый к статье, распаковываем, и ложим его в папку /components/com_virtuemart/themes/default/templates/browse/includes/
После, нужно прописать стили, чтобы добиться того вида блока сортировки, который вам нужен. Если хотите сделать как на демо сайте, то добавьте в CSS файл шаблона код:
Здравствуйте. У меня хак тоже получился, все работает. Но на странице товара (флаер) тоже вылазит ошибка Warning: Invalid argument supplied for foreach(). Не подскажете, в чем может быть причина?
Здравствуйте. Спасибо за пост. Очень полезный хак. Все нормально получилось. Только почему то из стандартного модуля производителей не ищет Такая ошибка Warning: Invalid argument supplied for foreach() in Z:\home\localhost\www\mebel\administrator\components\com_virtuemart\html\shop_browse_queries.php on line 185
Те, кто часто работает с Virtuemart знают о существовании такого замечательного модуля, как mod_virtuemart_universal v. 1.2.3 от Beliyadm. О самом… Подробнее
Для одного из интернет - магазинов потребовалось сортировать товары по производителям. Магазин выполнен на базе Joomla + Virtuemart. Заказчик написал… Подробнее
Вы можете отблагодарить автора:
WMR - R166832041362
WMZ - Z314865156270
QIWI - 9638061071
Яндекс деньги - 41001228750313
Комментарии
Для li в CSS задан width: 30%; Соответственно, в стоку помещаются три производителя.
Меняя width, вы можете увеличивать/уменьшать количество производителей в строке.
К примеру, если сделать width:20%, то в троке будет 5 производителей.
Еще подскажите пожалуйста где увеличить количество производителей в строке больше трех. Не могу найти.
Спасибо за быстрый ответ.
Не забывайте, что решения, предлагаемые мной на данном сайте были использованы под конкретные нужды, на сайтах заказчиков.
В частности, при разработке данной мофификации - не проверялась работа со стандартным модулем, так как он не использовался на сайте и был не нужен.
Все нормально получилось. Только почему то из стандартного модуля производителей не ищет
Такая ошибка
Warning: Invalid argument supplied for foreach() in Z:\home\localho st\www\mebel\ad ministrator\com ponents\com_vir tuemart\html\sh op_browse_queri es.php on line 185
Прокоментируйте пожалуйста