БЛОГОДЖУМЛА - БЛОГ О ДЖУМЛА

Фильтр по производителям в категории товаров

  • Категория: Virtuemart 1
  • Автор:
  • Просмотров: 12033

категория товаров Фильтр

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

Back to top