В помощь разработчикам 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>';
}
?>
переходим на наш сайт и проверяем.. все готово!