В помощь разработчикам Joomla 2.5

Фильтр товаров virtuemart 2

Очень удобная функция для обширного интернет магазина является фильтром товаров. Програмисты создаваемые компонент vieruemart 2 не посчитали нужным видимо добавить это в стандартный функцианал..

 

Конечно существует много различных модулей, с помощью которых можно создать фильтр по свойствам товаров, а так же по цене, но это в свою очередь идет нагрузка на сам сайт. Если нам не обходим такой разшириный фильтр а подойдет что мы добавим пару фильтров по нескольким полям то эта статья вам подойдет очень хорошо!

 

1. Открываем файл \administrator\components\com_virtuemart\models\product.php
Находим в нем следующий код и заменяем на наш.


if (!empty($this->searchcustoms)){ 
   $joinCustom = true ; 
   ....
}


Вставляем вместо этого кода следующий код

 

            if (!empty($this->searchcustoms)){
 $joinCustom = true ;
 foreach ($this->searchcustoms as $key => $searchcustom) {
   if($searchcustom=trim($searchcustom))
     $custom_search[] = '(pf.`virtuemart_custom_id`="'.(int)$key.'" and pf.`custom_value` like "' . $this->_db->getEscaped( $searchcustom, true ) . '")';
 }
 if(count($custom_search)) $where[] = " ( ".implode(' OR ', $custom_search )." ) ";
 else{
   $joinCustom=false;
   $this->searchcustoms=false;
 }
}

 

Дальше открываем файл \components\com_virtuemart\views\category\tmpl\default.php
Находим строку <div class="orderby-displaynumber"> и после нее заменяем этот код <div class="width70 floatleft">...</div> на наш:

 

<?php
/*
Делаем выборку из таблицы #__virtuemart_product_customfields всех размеров одежды virtuemart_custom_id=9, ID поля можно посмотреть тут:
Virtuemart -> Товары -> Настраиваемые поля -> смотрим первую колонку, это ID записи, в нашем случаи это «Размер одежды», тип поля «Атрибут корзины».
*/
$razmery='';
$db=JFactory::getDbo();
$db->setQuery('SELECT DISTINCT(custom_value) AS razmer FROM #__virtuemart_product_customfields WHERE virtuemart_custom_id=3');
$res=$db->loadObjectList();
 
if(is_array($res) && count($res)){
//Массив Размеров
 $a=array(0=>'Любой');
 
//Заносим данные из таблицы в массив Размеров
 foreach($res as $v) $a[$v->razmer]=$v->razmer;
 
//Сортируем
 ksort($a);

//Получаем значение выбранного размера одежды из запроса пользователя
 $razmer=JRequest::getvar('customfields', null);
 $razmer=(isset($razmer[9])) ? $razmer[9] : 0;

//Этот размер помещаем в начале массива
 if($razmer && isset($a[$razmer])){
   $x=array( $razmer=>'' );
   foreach($a as $k => $v) $x[$k]=$v;
   $a=$x;
 }else $razmer=0;

//Создаем фильтр по размерам одежды
 $razmery='<div class="orderlistcontainer"><div class="title">Выбрать размер</div>';
 $flag=false;
 foreach($a as $k => $v){
   if((string)$k==(string)$razmer) $x='<div class="activeOrder">';
   else{
     if(!$flag){
       $x='<div class="orderlist"><div>';
       $flag=true;
     }else $x='<div>';
   }
   $razmery.=$x.'<a href="'.JRoute::_('index.php?option=com_virtuemart&view=category&limitstart=0&virtuemart_category_id='.$this->category->virtuemart_category_id.(($k) ? '&customfields[3]='.$k : '')).'">'.$v.'</a></div>';
 }
 $razmery.='</div></div>';
}
?>

переходим на наш сайт и проверяем.. все готово!