Очень часто заказчик в интернет магазине просит сделать на странице категории товаров фильтр по производителям. Чтобы нажав на имя производителя мы увидели все его товары в этой категории. Сейчас я покажу как это реализуется в 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. Обернул ссылки на производителей в плавающие спаны - должны смещаться на вторую строку при большом количестве.
