Очень часто заказчик в интернет магазине просит сделать на странице категории товаров фильтр по производителям. Чтобы нажав на имя производителя мы увидели все его товары в этой категории. Сейчас я покажу как это реализуется в Virtuemart 1.1.7
Мы будем менять всего два файла:
\administrator\components\com_virtuemart\html\shop.browse.php
и, если у Вас используется тема default,
\components\com_virtuemart\themes\default\templates\browse\includes\browse_header_category.tpl.php
в шаблоне browse_header_category.tpl.php делаем вывод того что у нас получиться в нужном Вам месте:
<div>Торговые марки: <?php echo $manufacturers ?></div>
и основная работа по подготовке данных в shop.browse.php:
находим в районе 123 строки
$tpl->set( 'category_name', $category_name );
и после вставляем:
if( empty($manufacturer_id)) { $db->query( "SELECT #__{vm}_manufacturer.manufacturer_id, mf_name FROM #__{vm}_manufacturer, #__{vm}_product_mf_xref, #__{vm}_product_category_xref WHERE #__{vm}_product_mf_xref.manufacturer_id=#__{vm}_manufacturer.manufacturer_id AND #__{vm}_product_mf_xref.product_id=#__{vm}_product_category_xref.product_id AND #__{vm}_product_category_xref.category_id=".$category_id); while ($db->next_record()){ if (strpos($manufacturers,">".$db->f("mf_name")."<")==0) { $link="index.php?option=com_virtuemart&limitstart=0&category_id=$category_id&page=$modulename.browse&manufacturer_id=".$db->f("manufacturer_id"); $link.=empty($orderby) ? '' : "&orderby=$orderby"; $link.=empty($DescOrderBy) ? '' : "&DescOrderBy=$DescOrderBy"; $manufacturers.="f("mf_name")."'>".$db->f("mf_name").' '; } } } else { $db->query( "SELECT mf_name FROM #__{vm}_manufacturer WHERE #__{vm}_manufacturer.manufacturer_id=".$manufacturer_id); $db->next_record(); $link="index.php?option=com_virtuemart&limitstart=0&category_id=$category_id&page=$modulename.browse&manufacturer_id=".$db->f("manufacturer_id"); $link.=empty($orderby) ? '' : "&orderby=$orderby"; $link.=empty($DescOrderBy) ? '' : "&DescOrderBy=$DescOrderBy"; $manufacturers.="f("mf_name")."'>".$db->f("mf_name").' '; } if( !empty($manufacturer_id)) { $link="index.php?option=com_virtuemart&limitstart=0&category_id=$category_id&page=$modulename.browse"; $link.=empty($orderby) ? '' : "&orderby=$orderby"; $link.=empty($DescOrderBy) ? '' : "&DescOrderBy=$DescOrderBy"; $manufacturers.="Показать все "; } $tpl->set( 'manufacturers', $manufacturers );
Всё, наслаждаемся результатом...
P.S. в комментах многие говорят, что фильтрует не по категориям, а по всем товарам. Так вот чтобы этого не было - открываем файл administrator\components\com_virtuemart\html\shop_browse_queries.php
Находим
if( $category_id ) { if( !empty( $search_this_category ) && (!empty( $keyword ) || !empty( $manufacturer_id ) )) { $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; } elseif( empty( $keyword ) && empty( $manufacturer_id )) { $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; } }
и меняем на
if( $category_id ) { if( !empty( $search_this_category ) && (!empty( $keyword ) || !empty( $manufacturer_id ) )) { $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; } elseif( empty( $keyword ) && empty( $manufacturer_id )) { $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; }elseif( !empty( $manufacturer_id )) { $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; } }
Вот теперь точно наслаждаемся :)
UP. Теперь с SEF - ссылками
P.S. Обернул ссылки на производителей в плавающие спаны - должны смещаться на вторую строку при большом количестве.