Virtuemart 2 – фильтр \ поиск по характеристикам товаров

Virtuemart 2 – фильтр \ поиск по характеристикам товаров

Задача: создать для Виртумарта поисковый фильтр по размерам одежды в интернет-магазине: одежда для беременных и кормящих мам (Joomla 2.5). 

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

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

<?php
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=9'); 
$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[9]='.$k : '')).'">'.$v.'</a></div>'; 
 }
 $razmery.='</div></div>';
}
?>

<div class="width70 floatleft">
 <table border=0 cellpadding="0" cellspacing="0" style="margin:0;padding:0">
 <tr><td> 
 <?php echo $this->orderByList['orderby']; ?>
 <?php echo $this->orderByList['manufacturer']; ?>
 </td><td>&nbsp;
 <?php echo $razmery; ?> 
 </td></tr></table>
</div>

В продолжение темы поиска, была написана вторая статья: Поиск товаров в Virtuemart 2 по нескольким фильтрам.

Комментарии

#1 Kira 2012-04-24 02:24:08
Здравствуйте. Очень хотелось бы реализовать такой фильтр, но у меня почему-то ничего не получается - выводится куча ошибок и сайт вообще перестает грузится.
#2 Отдел разработки сайтов 2012-05-03 18:26:55
Цитата Kira
почему-то ничего не получается - выводится куча ошибок и сайт вообще перестает грузится.

Можете предоставить нам доступ к сайту (коду), чтобы локализовать проблему, поскольку так сложно сказать что-то конкретное в вашем случае.
#3 Ильшат 2012-05-24 23:32:54
Здравствуйте! Извините что не совсем по теме, а вот слева у вас на сайте красиво расположена менюшка соц.сетей, как называется модуль или плагин?) Как вывести... заранее спасибо!!!
#4 Отдел разработки сайтов 2012-05-25 08:29:36
Цитата Ильшат
Здравствуйте! Извините что не совсем по теме, а вот слева у вас на сайте красиво расположена менюшка соц.сетей, как называется модуль или плагин?) Как вывести... заранее спасибо!!!


Здравствуйте! Мы не стали изобретать велосипедов и воспользовались существующим сервисом http://share42.com/
В принципе, там всё просто. Если возникнут какие-то вопросы, обращайтесь. Поможем.
#5 Alex 2012-06-18 14:28:19
При замене первого блока кода пожсвечивается ошибка.
Ебираю
#6 Stels 2012-06-18 14:35:28
Проблема с заменой первого блока кода. Подсвечивается ошибка.
Код заменяю примерно на стр. 235.
Если этот блок не вставлять, то фильтр с размерами появляется.
Помогите решить проблему, пожалуйста.
#7 Отдел разработки сайтов 2012-06-18 16:00:16
Цитата Alex
При замене первого блока кода пожсвечивается ошибка.


убрать нужно полностью этот сегмент кода:
if (!empty($this->searchcustoms)){
$joinCustom = true ;
foreach ($this->searchcustoms as $key => $searchcustom) { /*…*/ }
if(count($custom_search)) /*…*/
else{ /*...*/ }
}

и новый код вставлять нужно без этого: скобка?php и ?скобка
ну и пишите тут ошибки, которые выдает PHP
#8 Stels 2012-06-18 17:25:40
Я вставляю код в раздел функции function sortSearchListQuery (стр.174), правильно?
Покажите или бросьте, пожалуйста, на мою почту код без сокрашения, который нужно заменить. Желательно номер строки, хоть примерно.
#9 Отдел разработки сайтов 2012-06-18 17:43:05
Цитата Stels
Я вставляю код в раздел функции function sortSearchListQuery (стр.174), правильно?
Покажите или бросьте, пожалуйста, на мою почту код без сокрашения, который нужно заменить. Желательно номер строки, хоть примерно.

Да, правильно. На почту отправлено.
#10 Stels 2012-06-18 19:08:08
Заработало!!!!!!!!!!!!!!!!!
Спасибо огромное!
А возможно по аналогии добавить еще фильтры для других полей?
#11 Отдел разработки сайтов 2012-06-18 22:33:00
Цитата Stels
А возможно по аналогии добавить еще фильтры для других полей?


Да, все дальнейшие изменения идут только тут уже: \components\com_virtuemart\views\category\tmpl\default.php

Например, фильтр по цвету:
$color=’’;
тут идет код запроса в базу и создание фильтра
вывод echo $color;
#12 Stels 2012-06-19 06:11:21
Добавил еще фильтр - работает!
Не могу побороть проблему - по умолчанию показывается весь список значений. После клика на нудном поле становится нормальным - выпадающим списком. При клике на ЛЮБОЙ - опять весь список.

//Создаем фильтр по жанрам
$janry='Выбрать жанр';
$flag=false;
foreach($a as $k => $v){
if($k==$janr) $x='';
else{
if(!$flag){
$x='';
$flag=true;
}else $x='';
}
$janry.=$x.''.$v.'';
}
$janry.='';
}
#13 Отдел разработки сайтов 2012-06-19 10:31:28
Цитата Stels
Не могу побороть проблему - по умолчанию показывается весь список значений. После клика на нудном поле становится нормальным - выпадающим списком. При клике на ЛЮБОЙ - опять весь список.


Попробуйте указать тип сравниваемых данных (string)

//Создаем фильтр по жанрам
$janry='Выбрать жанр';
$flag=false;
foreach($a as $k => $v){
if((string)$k==(string)$janr) $x='';
else{
if(!$flag){
$x='';
$flag=true;
}else $x='';
}
$janry.=$x.''.$v.'';
}
$janry.='';
}
#14 Paul Kart 2012-07-12 04:16:15
А как привязать данный фильтр, только к определенной категории, т.е. что бы он не отображался на всех категориях?
#15 Отдел разработки сайтов 2012-07-12 06:34:47
Цитата Paul Kar
А как привязать данный фильтр, только к определенной категории, т.е. что бы он не отображался на всех категориях?


Например, поместить код сюда:
if(preg_match('/\/(odezhda|detskaya)\-/i', $_SERVER['REQUEST_URI'])){
отсюда
$db=JFactory::getDbo();
досюда
$razmery.='</div></div>';
}
}

Для раздела Разное, уже фильтра нет:
http://mama-dama.com/magazin/31/raznoe.html
#16 Алексей 2012-08-15 10:25:47
А как можно сделать фильтр не на странице категории, а например на главной, и результат вывести в категории?
#17 Отдел разработки сайтов 2012-08-15 15:15:26
Цитата Алексей
А как можно сделать фильтр не на странице категории, а например на главной, и результат вывести в категории?


Нужно вставить в главную страницу следующий код (используя плагин Add PHP http://2v3.su/blog/web/35.html, либо mod_php):
$js = "jQuery(document).ready(function () {
jQuery('.orderlistcontainer').hover(
function() { jQuery(this).find('.orderlist').stop().show()},
function() { jQuery(this).find('.orderlist').stop().hide()}
)
});";
$document = JFactory::getDocument();
$document->addScriptDeclaration($js);

Далее идет код, приведенный в статье:
\components\com_virtuemart\views\category\tmpl\default.php
Из него нужно убрать вывод сортировки и производителей: $this->orderByList['orderby'], $this->orderByList['manufacturer'].
#18 Алексей 2012-08-15 18:49:58
Цитата Отдел разработки сайтов
Цитата Алексей
А как можно сделать фильтр не на странице категории, а например на главной, и результат вывести в категории?


Нужно вставить в главную страницу следующий код (используя плагин Add PHP http://2v3.su/blog/web/35.html, либо mod_php):
$js = "jQuery(document).ready(function () {
jQuery('.orderlistcontainer').hover(
function() { jQuery(this).find('.orderlist').stop().show()},
function() { jQuery(this).find('.orderlist').stop().hide()}
)
});";
$document = JFactory::getDocument();
$document->addScriptDeclaration($js);

Далее идет код, приведенный в статье:
\components\com_virtuemart\views\category\tmpl\default.php
Из него нужно убрать вывод сортировки и производителей: $this->orderByList['orderby'], $this->orderByList['manufacturer'].

Спасибо за помощь. Скажите а я смогу с помощью этого кода сделать фильтр по нескольким полям?
#19 Отдел разработки сайтов 2012-08-15 22:51:56
Цитата Алексей
Скажите а я смогу с помощью этого кода сделать фильтр по нескольким полям?


//не тестировал, но вот так:

$results=array(9=>'Выбрать размер', 10=>'Выбрать цвет');
$customfields=array(9=>0, 10=>0);

$var=JRequest::getvar('customfields', null);
foreach($customfields as $custom_id => &$value){
if($var && !empty($var[$custom_id]))
$value='&customfields['.$custom_id.']='.$var[$custom_id];
else unset($customfields[$custom_id]);
}

foreach($results as $custom_id => &$result){
$ff=$customfields;
unset($ff[$custom_id]);
$ff=implode('', $ff);
$title=$result;
$result='';
/*
1) сюда нужно поместить код из статьи, начиная от $db=JFactory::getDbo(); до ?>
2) заменить все 9 на $custom_id, а переменную $razmery на $result;
3) заменить в статье текст: Выбрать размер на '.$title.'
4) после $this->category->virtuemart_category_id. добавить $ff.
*/
}
//Результат будет тут: $results[9] и $results[10]
#20 Алексей 2012-08-15 23:32:59
Цитата Отдел разработки сайтов
Цитата Алексей
Скажите а я смогу с помощью этого кода сделать фильтр по нескольким полям?


//не тестировал, но вот так:

$results=array(9=>'Выбрать размер', 10=>'Выбрать цвет');
$customfields=array(9=>0, 10=>0);

$var=JRequest::getvar('customfields', null);
foreach($customfields as $custom_id => &$value){
if($var && !empty($var[$custom_id]))
$value='&customfields['.$custom_id.']='.$var[$custom_id];
else unset($customfields[$custom_id]);
}

foreach($results as $custom_id => &$result){
$ff=$customfields;
unset($ff[$custom_id]);
$ff=implode('', $ff);
$title=$result;
$result='';
/*
1) сюда нужно поместить код из статьи, начиная от $db=JFactory::getDbo(); до ?>
2) заменить все 9 на $custom_id, а переменную $razmery на $result;
3) заменить в статье текст: Выбрать размер на '.$title.'
4) после $this->category->virtuemart_category_id. добавить $ff.
*/
}
//Результат будет тут: $results[9] и $results[10]

Наверно не правильно сформулировал вопрос :). Да в результате появилось два поля, Но вильтр по ним работает оддельно, как сделать так что бы утбирался товар по двум условиям и по размеру и по цвету. Сейчас на поле фильтра получается активна ссылка и нажимая на нее я перехожу на фильтр только по одному параметру, а нужно как я уже сказал по двум. Буду очень признателен в помощи, уже весь нет облазил, а найти не могу. Спасибо!
#21 Отдел разработки сайтов 2012-08-16 00:04:53
Цитата Алексей
Наверно не правильно сформулировал вопрос :). Да в результате появилось два поля, Но вильтр по ним работает оддельно, как сделать так что бы утбирался товар по двум условиям и по размеру и по цвету. Сейчас на поле фильтра получается активна ссылка и нажимая на нее я перехожу на фильтр только по одному параметру, а нужно как я уже сказал по двум.

Этот код и должен был по двум отбирать, при нажатии на Размер, фильтруется по размеру, который будет учитываться при клике на Цвет, уже в категории товаров. В переменной $ff должно было быть для Цвета: &customfields[9]=Размер, а для Размера, к ссылке фильтра JRoute прибавляться: &customfields[10]=Цвет.
#22 Алексей 2012-08-16 05:15:04
если сделать так то отбыраются поля не по зхначению и а по значению или, тоесть покажет и все товары с выбраным размером, и все товары с выбраныс цветом. Я так понимаю что нужно изменить цикл в product.php но не могу догадатся как?
#23 Отдел разработки сайтов 2012-08-16 06:23:33
Цитата Алексей
если сделать так то отбыраются поля не по зхначению и а по значению или, тоесть покажет и все товары с выбраным размером, и все товары с выбраныс цветом. Я так понимаю что нужно изменить цикл в product.php но не могу догадатся как?

все изменения идут тут \components\com_virtuemart\views\category\tmpl\default.php т.е. то что указано в статье вложить в цикл, который написан выше.

\administrator\components\com_virtuemart\models\product.php
а в этой строке: if(count($custom_search)) $where[] = " ( ".implode(' OR ', $custom_search )." ) "; можно заменить OR на AND
#24 Алексей 2012-08-16 06:32:34
Цитата Отдел разработки сайтов
Цитата Алексей
если сделать так то отбыраются поля не по зхначению и а по значению или, тоесть покажет и все товары с выбраным размером, и все товары с выбраныс цветом. Я так понимаю что нужно изменить цикл в product.php но не могу догадатся как?

все изменения идут тут \components\com_virtuemart\views\category\tmpl\default.php т.е. то что указано в статье вложить в цикл, который написан выше.

\administrator\components\com_virtuemart\models\product.php
а в этой строке: if(count($custom_search)) $where[] = " ( ".implode(' OR ', $custom_search )." ) "; можно заменить OR на AND

Если изменить так то вообще ничего не ищет, те запрос получается таким ВЫБРАТЬ costomfields с ИД 13 где costum_value = 32 И Красный и ноже самое для другого ид, Скажите что можно сделать. Спасибо
#25 Отдел разработки сайтов 2012-08-16 06:59:47
Цитата Алексей

Если изменить так то вообще ничего не ищет, те запрос получается таким ВЫБРАТЬ costomfields с ИД 13 где costum_value = 32 И Красный и ноже самое для другого ид,

в фильтре выберите размер и цвет, или хоть что-то одно, в исходнике страницы найдите ссылки вида: для цвета ?customfields[9]=размер&customfields[10]=цвет и для размера ?customfields[10]=цвет&customfields[9]=размер. Скиньте, если они есть.
Также после этого блока в product.php
if (!empty($this->searchcustoms)){
тут код
}
впишите:
echo 'СКОБКА!--debug: '.var_export($where, true).'--СКОБКА';
чтобы посмотреть отладочную информацию внутри страницы.
#26 Алексей 2012-08-16 07:34:51
Пока формирую ссылку вручную в виде
/index.php?option=com_virtuemart&search=true&view=category&customfields[10]=1&customfields[4]=226?customfields[4]=226&customfields[10]=1

отладочная информация выдала
http://foamart/index.php?option=com_virtuemart&search=true&view=category&customfields[10]=1&customfields[4]=226?customfields[4]=226&customfields[10]=1

в результате показались лиш товары гдеcustomfields [10]=1
#27 Алексей 2012-08-16 07:46:53
Цитата Алексей
Пока формирую ссылку вручную в виде
[quote]/index.php?option=com_virtuemart&search=true&view=category&customfields[10]=1&customfields[4]=226?customfields[4]=226&customfields[10]=1

отладочная информация выдала
array ( 0 => ' ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "1") OR (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226") ) ', )

Сделал ошибку в предыдущем посте
#28 Отдел разработки сайтов 2012-08-16 07:47:03
/index.php?option=com_virtuemart&search=true&view=category&customfields[10]=1&customfields[4]=226?customfields[4]=226&customfields[10]=1
знак вопроса (?) может быть только один, после него идут разделители параметров амперсанды (&).

в отладочной информации var_export($where) должен быть SQL код.
Открываем файл \administrator\components\com_virtuemart\models\product.php
Находим в нем следующий код.
if (!empty($this->searchcustoms)){
$joinCustom = true ;
....
}
после него var_export($where);
#29 Отдел разработки сайтов 2012-08-16 07:48:31
Цитата Алексей
array ( 0 => ' ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "1") OR (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226") ) ', )


Я уже написал выше что:
а в этой строке: if(count($custo m_search)) $where[] = " ( ".implode(' OR ', $custom_search )." ) "; заменить OR на AND
#30 Алексей 2012-08-16 07:58:36
в product.php сделал так
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(' AND ', $custom_search )." ) "; else{ $joinCustom=false; $this->searchcustoms=false; } } var_export($where);

ссылка в выде
index.php?option=com_virtuemart&search=true&view=category&customfields[10]=2&customfields[4]=226&customfields[4]=226&customfields[10]=2

отладочная инфа
array ( 0 => ' ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "2") AND (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226") ) ', )

вообще ничего не показывает хотя товар такой есть
#31 Алексей 2012-08-16 08:00:13
Цитата Алексей
в product.php сделал так
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(' AND ', $custom_search )." ) "; else{ $joinCustom=false; $this->searchcustoms=false; } } var_export($where);

ссылка в выде
index.php?option=com_virtuemart&search=true&view=category&customfields[10]=2&customfields[4]=226&customfields[4]=226&customfields[10]=2

отладочная инфа
array ( 0 => ' ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "2") AND (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226") ) ', )

вообще ничего не показывает хотя товар такой есть

выправил ссылку на index.php?option=com_virtuemart&search=true&view=category&customfields[10]=2&customfields[4]=226&customfields[4]=226&customfields[10]=2
тоже ничего :(
#32 Алексей 2012-08-16 08:02:48
если сделать ссылку в таком виде
http://foamart/index.php?option=com_virtuemart&search=true&view=category&customfields[10]=2&customfields[4]=226?customfields[4]=226&customfields[10]=2
то отладочная инфа имеет такой вид:
array ( 0 => ' ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "2") AND (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226?customfields[4]=226") ) ', )
#33 Отдел разработки сайтов 2012-08-16 08:05:59
Цитата Алексей
array ( 0 => ' ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "2") AND (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226?customfields[4]=226") ) ', )

этого 226?customfields[4]=226 тут не должно быть, я выше написал, что нужно исправить ссылку.

если такой товар точно есть, тогда перед строкой в product.php
$product_ids = $this->exeSortSearchListQuery(2, $select, $joinedTables, $whereString, $groupBy, $orderBy, $this->filter_order_Dir, $nbrReturnProducts);
добавить:
echo $select.$joinedTables.$whereString.$groupBy.$orderBy;
и вывести SQL запрос полностью, затем поэкспериментировать с ним в таблице товаров в phpmyadmin
#34 Алексей 2012-08-16 08:15:20
запрос в базу получается такой
SELECT * FROM `jm75l_virtuemart_products_ru_ru` as l JOIN `jm75l_virtuemart_products` AS p using (`virtuemart_product_id`) LEFT JOIN `jm75l_virtuemart_product_customfields` as pf ON p.`virtuemart_product_id` = pf.`virtuemart_product_id` LEFT JOIN `jm75l_virtuemart_product_shoppergroups` ON p.`virtuemart_product_id` = `jm75l_virtuemart_product_shoppergroups`.`virtuemart_product_id` LEFT OUTER JOIN `jm75l_virtuemart_shoppergroups` as s ON s.`virtuemart_shoppergroup_id` = `jm75l_virtuemart_product_shoppergroups`.`virtuemart_shoppergroup_id` WHERE ( ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "2") AND (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226") ) AND p.`published`="1" AND (s.`virtuemart_shoppergroup_id`= "1" OR (s.`virtuemart_shoppergroup_id`) IS NULL )) group by p.`virtuemart_product_id` ORDER BY p.virtuemart_product_id 

ноесли выполнить в phpmyadmin говорит
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' LIMIT 0, 30' at line 1
#35 Отдел разработки сайтов 2012-08-16 08:30:52
Цитата Алексей
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' LIMIT 0, 30' at line 1

запрос правильный, просто при копировании в конце захватились лишние символы, удалите их в конце запроса. И поэкспериментируйте с этими значениями, пока не будет выдан товар в phpmyadmin: (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "2") AND (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226")
#36 Алексей 2012-08-16 08:42:34
Да был лишний символ :)
Результат такой
MySQL returned an empty result set (i.e. zero rows). ( Query took 0.1220 sec )
те пусто
но в базе если сделать выборку по id товара то выдает
#37 Отдел разработки сайтов 2012-08-16 08:49:21
Цитата Алексей

MySQL returned an empty result set (i.e. zero rows). ( Query took 0.1220 sec )

и тут все же нужно указывать OR а не AND
if(count($custom_search)) $where[] = " ( ".implode(' OR ', $custom_search )." ) ";

для эксперимента:
SELECT * FROM `jm75l_virtuemart_products_ru_ru` as l JOIN `jm75l_virtuemart_products` AS p using (`virtuemart_product_id`) LEFT JOIN `jm75l_virtuemart_product_customfields` as pf ON p.`virtuemart_product_id` = pf.`virtuemart_product_id` WHERE ( ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "2") OR (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226") ) AND p.`published`="1") group by p.`virtuemart_product_id` ORDER BY p.virtuemart_product_id;

потом этот:
SELECT * FROM `jm75l_virtuemart_products_ru_ru` as l JOIN `jm75l_virtuemart_products` AS p using (`virtuemart_product_id`) LEFT JOIN `jm75l_virtuemart_product_customfields` as pf ON p.`virtuemart_product_id` = pf.`virtuemart_product_id` WHERE ( ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` = "2") OR (pf.`virtuemart_custom_id`="4" and pf.`custom_value` = "226") )) group by p.`virtuemart_product_id` ORDER BY p.virtuemart_product_id;
#38 Отдел разработки сайтов 2012-08-16 09:49:20
Для фильтра по обоим параметрам нужно изменить в \administrator\components\com_virtuemart\models\product.php:

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

найти строку if ($this->searchcustoms) { и заменить:
if ($this->searchcustoms) {
foreach (array_keys($this->searchcustoms) as $key) {
$joinedTables .= ' LEFT JOIN `#__virtuemart_product_customfields` as pf'.$key.' ON p.`virtuemart_product_id` = pf'.$key.'.`virtuemart_product_id` ';
}
}

тестируйте, у меня просто под рукой нет товаров с различными параметрами.
#39 Алексей 2012-08-16 10:13:06
Цитата Отдел разработки сайтов
Цитата Алексей

MySQL returned an empty result set (i.e. zero rows). ( Query took 0.1220 sec )

и тут все же нужно указывать OR а не AND
if(count($custom_search)) $where[] = " ( ".implode(' OR ', $custom_search )." ) ";

для эксперимента:
SELECT * FROM `jm75l_virtuemart_products_ru_ru` as l JOIN `jm75l_virtuemart_products` AS p using (`virtuemart_product_id`) LEFT JOIN `jm75l_virtuemart_product_customfields` as pf ON p.`virtuemart_product_id` = pf.`virtuemart_product_id` WHERE ( ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` like "2") OR (pf.`virtuemart_custom_id`="4" and pf.`custom_value` like "226") ) AND p.`published`="1") group by p.`virtuemart_product_id` ORDER BY p.virtuemart_product_id;

потом этот:
SELECT * FROM `jm75l_virtuemart_products_ru_ru` as l JOIN `jm75l_virtuemart_products` AS p using (`virtuemart_product_id`) LEFT JOIN `jm75l_virtuemart_product_customfields` as pf ON p.`virtuemart_product_id` = pf.`virtuemart_product_id` WHERE ( ( (pf.`virtuemart_custom_id`="10" and pf.`custom_value` = "2") OR (pf.`virtuemart_custom_id`="4" and pf.`custom_value` = "226") )) group by p.`virtuemart_product_id` ORDER BY p.virtuemart_product_id;

и в первом и во втором варианте выводит только где `custom_value` = "226")
#40 Алексей 2012-08-16 10:26:17
Цитата Отдел разработки сайтов
Для фильтра по обоим параметрам нужно изменить в \administrator\components\com_virtuemart\models\product.php:

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

найти строку if ($this->searchcustoms) { и заменить:
if ($this->searchcustoms) {
foreach (array_keys($this->searchcustoms) as $key) {
$joinedTables .= ' LEFT JOIN `#__virtuemart_product_customfields` as pf'.$key.' ON p.`virtuemart_product_id` = pf'.$key.'.`virtuemart_product_id` ';
}
}

тестируйте, у меня просто под рукой нет товаров с различными параметрами.

по верому ничего не выводит, по второму и все товары
#41 Отдел разработки сайтов 2012-08-16 10:26:51
Цитата Алексей
и в первом и во втором варианте выводит только где `custom_value` = "226")

если 10=2 и 4=226 относятся к товару 61, то и должна возвращаться одна строка товара, если других товаров нет.

Просто вариант с OR ищет товары по Размеру или Цвету, но не оба совпадения сразу. А вариант с AND, см выше, должен учитывать оба параметра.
#42 Отдел разработки сайтов 2012-08-16 10:32:52
Цитата Алексей
по верому ничего не выводит, по второму и все товары

т.е. вариант с AND ничего не выдал, тогда мне нужны ваши таблицы с товарами, для тестирования.
#43 Алексей 2012-08-16 10:43:09
Цитата Отдел разработки сайтов
Цитата Алексей
и в первом и во втором варианте выводит только где `custom_value` = "226")

если 10=2 и 4=226 относятся к товару 61, то и должна возвращаться одна строка товара, если других товаров нет.

Просто вариант с OR ищет товары по Размеру или Цвету, но не оба совпадения сразу. А вариант с AND, см выше, должен учитывать оба параметра.

Если кидать сам запрос в базу выдается результат и по одному и по второму полю отдельно, что здесть можно сделать? Я понимаю что оно ищет совподение в одной строке а не по всей таблице? Или сделать отдельный запрос в базу где прощитать самому какие кей передать и все, только накручено получится к:)
#44 Алексей 2012-08-16 10:47:07
я скину бекап базы. скажите только куда?
#45 Отдел разработки сайтов 2012-08-16 10:49:28
Цитата Алексей
я скину бекап базы. скажите только куда?

хоть сюда или на почту, в контактах есть почта для сайтов.
#46 Алексей 2012-08-16 10:54:54
Скинул, на мыло
#47 Отдел разработки сайтов 2012-08-16 11:11:26
Цитата Алексей
Скинул, на мыло


хорошо, но тут mail [@] 2v3.su пока нет. Тогда можно загрузить на майл или rghost.ru и скинуть ссылку на почту.
#48 Алексей 2012-08-16 16:25:20
Я просто скинул туда откуда мне сообщения приходили =), скинул на ту что вы сказали
#49 Алексей 2012-08-16 22:46:30
Спасибо большое все получилось, Вы все сказали верно еще в этом
Цитата Отдел разработки сайтов
для фильтра по обоим параметрам нужно изменить в administratorcomponentscom_virtuemartmodelsproduct.php: if (!empty($this->searchcustoms)){ $joinCustom = true ; foreach ($this->searchcustoms as $key => $searchcustom) { if($searchcustom=trim($searchcustom)){ $key=intval($key); $custom_search[$key] = '(pf'.$key.'.`virtuemart_custom_id`="'.$key.'" and pf'.$key.'.`custom_value` like "' . $this->_db->getEscaped( $searchcustom, true ) . '")'; } } if(count($custom_search)) $where[] = " ( ".implode(' AND ', $custom_search )." ) "; else{ $joinCustom=false; $this->searchcustoms=false; } } найти строку if ($this->searchcustoms) { и заменить: if ($this->searchcustoms) { foreach (array_keys($this->searchcustoms) as $key) { $joinedTables .= ' LEFT JOIN `#__virtuemart_product_customfields` as pf'.$key.' ON p.`virtuemart_product_id` = pf'.$key.'.`virtuemart_product_id` '; } } тестируйте, у меня просто под рукой нет товаров с различными параметрами.

посте я просто правильно не сделал второй пункт, и все получилось, еще раз спасибо
#50 kolka 2012-10-29 22:34:50
Цитата Отдел разработки сайтов
Цитата Paul Kar
А как привязать данный фильтр, только к определенной категории, т.е. что бы он не отображался на всех категориях?


Например, поместить код сюда:
if(preg_match('/\/(odezhda|detskaya)\-/i', $_SERVER['REQUEST_URI'])){
отсюда
$db=JFactory::getDbo();
досюда
$razmery.='</div></div>';
}
}

Для раздела Разное, уже фильтра нет:
http://mama-dama.com/magazin/31/raznoe.html



Cкажите пожалуйста, можно ли сделать выборку чтобы к конкретным категориям показывались конкретные размеры? из одного поля "размер"
Т.к. у меня сайт предусматривает что у одних товаров показан размер, у других длина, у третих - рост. А мне не нужно чтобы там где размер (M,L,XL) выводился рост (181см., 205см.)...
Зарание благодарен))
#51 Отдел разработки сайтов 2012-10-30 05:57:53
Цитата kolka
Cкажите пожалуйста, можно ли сделать выборку чтобы к конкретным категориям показывались конкретные размеры? из одного поля "размер"

http://2v3.su/blog/web/72.html#comment-79

$results=$customfields=array();

if(preg_match('#/odezhda#i', $_SERVER['REQUEST_URI'])){
$results=array( 4=>'Выбрать размер', 10=>'Выбрать цвет');
$customfields=a rray(4=>0, 10=>0);

}elseif(preg_match('#/obuv#i', $_SERVER['REQUEST_URI'])){
$results=array( 5=>'Выбрать размер обуви');
$customfields=array(5=>0);
}

Что касается общего поля Размер, то тут только фильтровать через сравнение, приблизительно так:

$flag_odezhda=preg_match('#/odezhda#i', $_SERVER['REQUEST_URI']);
$flag_obuv=preg_match('#/obuv#i', $_SERVER['REQUEST_URI']);

foreach($res as $v){
if($flag_odezhda && $v->razmer < 100){
$a[$v->razmer]=$v->razmer;

}elseif($flag_obuv && $v->razmer < 50){
$a[$v->razmer]=$v->razmer;
}
}
#52 kolka 2012-10-31 15:03:40
Цитата Отдел разработки сайтов
[quote name="kolka"]
Что касается общего поля Размер, то тут только фильтровать через сравнение, приблизительно так:

$flag_odezhda=preg_match('#/odezhda#i', $_SERVER['REQUEST_URI']);
$flag_obuv=preg_match('#/obuv#i', $_SERVER['REQUEST_URI']);

foreach($res as $v){
if($flag_odezhda && $v->razmer < 100){
$a[$v->razmer]=$v->razmer;

}elseif($flag_obuv && $v->razmer < 50){
$a[$v->razmer]=$v->razmer;
}
}


Спасибо большое. Немного доработал, но в целом именно оно))
Только почему-то не вводится последовательность категорий (от "Первой" до "Десятой" применяем один фильтр)... Пришлось отдельно под каждую категорию Риджест_УРЛ писать.
Может есть какая-то возможно по АйДи, например, добавить?
#53 Отдел разработки сайтов 2012-10-31 15:11:46
Цитата kolka
Может есть какая-то возможно по АйДи, например, добавить?

да, например:
$flag_odezhda=($_REQUEST['virtuemart_category_id']==1);
$flag_obuv=($_REQUEST['virtuemart_category_id']==2);
или если много
$flag_odezhda=in_array($_REQUEST['virtuemart_category_id'], array(1,3,5));
$flag_obuv=in_array($_REQUEST['virtuemart_category_id'], array(2,4,6));
#54 Вован 2012-11-22 09:43:35
Здравствуйте, может кто подскажет, как реализовать поиск виртуемарт2,02 по настраиваемым полям? а именно мне нужно реализовать поиск товаров (медицынских) по названию заболеванию. сами заболевания вбиваю в настраиваемые поля
#55 Отдел разработки сайтов 2012-11-22 10:42:59
Цитата Вован
а именно мне нужно реализовать поиск товаров (медицынских) по названию заболеванию. сами заболевания вбиваю в настраиваемые поля

если кратко, то:
открыть файл \administrator\components\com_virtuemart\models\product.php

перед строкой:

if($onlyPublished){ $where[] = ' p.`published`="1" '; }

вставить:

if($useCore && !empty($this->keyword)){
$keyword = '"%' . $this->_db->getEscaped($this->keyword, true) . '%"';
$where[]='pf.`custom_value` like '.$keyword;
if(!$this->searchcustoms) $this->searchcustoms=true;
if(!$groupBy) $groupBy = 'group by p.`virtuemart_product_id`';
}

этот код при стандартном поиске (название, описание и т.д.), дополнительно проверяет еще настраиваемые поля.
#56 Вован 2012-11-22 11:06:39
Спасибо, что отозвались, но почему то не помогло решить проблему, VirtueMart Поиск товаров так и не работает, может есть еще какой то вариант
#57 Отдел разработки сайтов 2012-11-22 11:28:33
Цитата Вован
VirtueMart Поиск товаров так и не работает, может есть еще какой то вариант


в том же файле, перед строкой: return $product_ids;
добавьте:
echo $select . $joinedTables . $whereString . $groupBy . $orderBy;
чтобы посмотреть сформированный запрос, сюда его.
#58 Вован 2012-11-22 11:31:39
l.`virtuemart_product_id` FROM `#__virtuemart_products_ru_ru` as l JOIN `#__virtuemart_products` AS p using (`virtuemart_product_id`) LEFT JOIN `#__virtuemart_product_categories` ON p.`virtuemart_product_id` = `#__virtuemart_product_categories`.`virtuemart_product_id` LEFT JOIN `#__virtuemart_categories_ru_ru` as c ON c.`virtuemart_category_id` = `#__virtuemart_product_categories`.`virtuemart_category_id` LEFT JOIN `#__virtuemart_product_manufacturers` ON p.`virtuemart_product_id` = `#__virtuemart_product_manufacturers`.`virtuemart_product_id` LEFT JOIN `#__virtuemart_manufacturers_ru_ru` as m ON m.`virtuemart_manufacturer_id` = `#__virtuemart_product_manufacturers`.`virtuemart_manufacturer_id` LEFT JOIN `#__virtuemart_product_customfields` as pf ON p.`virtuemart_product_id` = pf.`virtuemart_product_id` LEFT JOIN `#__virtuemart_product_shoppergroups` ON p.`virtuemart_product_id` = `#__virtuemart_product_shoppergroups`.`virtuemart_product_id` LEFT OUTER JOIN `#__virtuemart_shoppergroups` as s ON s.`virtuemart_shoppergroup_id` = `#__virtuemart_product_shoppergroups`.`virtuemart_shoppergroup_id` WHERE ((`product_name` LIKE "%грипп%" OR `product_s_desc` LIKE "%грипп%" OR `category_name` LIKE "%грипп%" OR `category_description` LIKE "%грипп%" OR `mf_name` LIKE "%грипп%") AND pf.`custom_value` like "%грипп%" AND p.`published`="1" AND ( s.`virtuemart_shoppergroup_id`= "1" OR s.`virtuemart_shoppergroup_id` IS NULL ) ) group by p.`virtuemart_product_id` ORDER BY `p`.virtuemart_product_id
#59 Отдел разработки сайтов 2012-11-22 11:43:44
исправьте так:

перед строкой if(!empty($filter_search)){
это:
$filter_search[]='pf.`custom_value` like '.$keyword;

а перед if($onlyPublished){ $where[] = ' p.`published`="1" '; }
это:
if(!empty($filter_search) && !$this->searchcustoms)
$this->searchcustoms=true;
#60 Вован 2012-11-22 11:57:49
спасибо, вы мне очень помогли )
#61 Александр 2012-12-09 14:14:46
Добрый день... Получилось вывести в шаблоне все размеры и выводятся размеры в выпадающем списке но когда я выбираю какой то размер то не выводит товар с этим размером.. вообще не один товар не выводит.. в чем может быть проблема?
#62 Александр 2012-12-09 15:00:07
Цитата Александр
Добрый день... Получилось вывести в шаблоне все размеры и выводятся размеры в выпадающем списке но когда я выбираю какой то размер то не выводит товар с этим размером.. вообще не один товар не выводит.. в чем может быть проблема?

посидел немного поэкспериментировал и в строчке
$razmery.=$x.''.$v.'';

вставил в переменную customfields[3] значение 3 и все заработало... правильно я все сделал?
#63 Отдел разработки сайтов 2012-12-09 19:14:53
Цитата Александр
вставил в переменную customfields[3] значение 3 и все заработало... правильно я все сделал?

Если все работает, то значит правильно. Вот еще вариант реализации: http://2v3.su/blog/web/72.html
#64 Александр 2012-12-10 12:23:49
С добавлением одного поля все получилось а вот с добавление второго что то проблема возникает.. что необходимо прописать для добавления второго поля?
#65 Отдел разработки сайтов 2012-12-10 13:39:28
Цитата Александр
что необходимо прописать для добавления второго поля?

Т.е. все сделано как тут http://2v3.su/blog/web/72.html и второго поля все равно нет?
#66 Александр 2012-12-10 14:15:25
Цитата Отдел разработки сайтов
Цитата Александр
что необходимо прописать для добавления второго поля?

Т.е. все сделано как тут http://2v3.su/blog/web/72.html и второго поля все равно нет?

если честно немного затупил.. извените..

Еще один встречный вопрос а как можно сделать фльрацию по цене?
#67 Отдел разработки сайтов 2012-12-10 19:22:37
Цитата Сергей
Еще один встречный вопрос а как можно сделать фльрацию по цене?


Опять же если кратко:

<form action="index.php" method="get">
Цена от <input type="text" name="product_price1" /> до <input type="text" name="product_price2" />
<input type="hidden" name="limitstart" value="0" />
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" name="view" value="category" />
<input type="submit" value="Найти" />
</form>

В файле \administrator\components\com_virtuemart\models\product.php
перед if ($virtuemart_category_id>0) добавить:

$product_price1 =JRequest::getInt('product_price1',0);
$product_price2 =JRequest::getInt('product_price2',0);

if($product_price1) $where[] = 'pp.`product_price` >='. $product_price1;
if($product_price2) $where[] = 'pp.`product_price` <='. $product_price2;
if($product_price1 || $product_price2) $joinPrice=true;
#68 Александр 2012-12-11 11:40:08
Цитата Отдел разработки сайтов
Цитата Сергей
Еще один встречный вопрос а как можно сделать фльрацию по цене?


Опять же если кратко:

<form action="index.php" method="get">
Цена от <input type="text" name="product_price1" /> до <input type="text" name="product_price2" />
<input type="hidden" name="limitstart" value="0" />
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" name="view" value="category" />
<input type="submit" value="Найти" />
</form>

В файле \administrator\components\com_virtuemart\models\product.php
перед if ($virtuemart_category_id>0) добавить:

$product_price1 =JRequest::getInt('product_price1',0);
$product_price2 =JRequest::getInt('product_price2',0);

if($product_price1) $where[] = 'pp.`product_price` >='. $product_price1;
if($product_price2) $where[] = 'pp.`product_price` <='. $product_price2;
if($product_price1 || $product_price2) $joinPrice=true;

Благодорю вас за помощь, у меня клиент обьявился по поводу создания наподобии букмектерской конторы.. я дал ваш сайт и сказал чтобы он к вам обратился по этому поводу.
#69 Александр 2012-12-12 11:46:26
Цитата Александр
Цитата Отдел разработки сайтов
Цитата Сергей
Еще один встречный вопрос а как можно сделать фльрацию по цене?


Опять же если кратко:

<form action="index.php" method="get">
Цена от <input type="text" name="product_price1" /> до <input type="text" name="product_price2" />
<input type="hidden" name="limitstart" value="0" />
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" name="view" value="category" />
<input type="submit" value="Найти" />
</form>

В файле \administrator\components\com_virtuemart\models\product.php
перед if ($virtuemart_category_id>0) добавить:

$product_price1 =JRequest::getInt('product_price1',0);
$product_price2 =JRequest::getInt('product_price2',0);

if($product_price1) $where[] = 'pp.`product_price` >='. $product_price1;
if($product_price2) $where[] = 'pp.`product_price` <='. $product_price2;
if($product_price1 || $product_price2) $joinPrice=true;

Благодорю вас за помощь, у меня клиент обьявился по поводу создания наподобии букмектерской конторы.. я дал ваш сайт и сказал чтобы он к вам обратился по этому поводу.


В файле \administrator\components\com_virtuemart\models\product.php нет такой у меня проверки вообще if ($virtuemart_category_id>0)
#70 Отдел разработки сайтов 2012-12-12 12:49:01
Цитата Александр
В файле \administrator\components\com_virtuemart\models\product.php нет такой у меня проверки вообще if ($virtuemart_category_id>0)

Надо было указать версию виртумарта. Можно тогда вставить в районе следующего кода:
if($onlyPublished){
$where[] = ' p.`published`="1" ';
}
#71 Александр 2012-12-13 14:16:59
Цитата Отдел разработки сайтов
Цитата Александр
В файле \administrator\components\com_virtuemart\models\product.php нет такой у меня проверки вообще if ($virtuemart_category_id>0)

Надо было указать версию виртумарта. Можно тогда вставить в районе следующего кода:
if($onlyPublished){
$where[] = ' p.`published`="1" ';
}

и такого нет... у меня версия стоит 2.0.8e
#72 Отдел разработки сайтов 2012-12-13 14:34:12
Цитата Александр
и такого нет... у меня версия стоит 2.0.8e

специально пришлось выкачать эту версию, как и предполагалось, там есть и то и другое, А поискать можно было хотя бы по словам: $virtuemart_category_id или $onlyPublished
#73 Александр 2012-12-13 14:42:43
Цитата Отдел разработки сайтов
Цитата Александр
и такого нет... у меня версия стоит 2.0.8e

специально пришлось выкачать эту версию, как и предполагалось, там есть и то и другое, А поискать можно было хотя бы по словам: $virtuemart_category_id или $onlyPublished

ну там по всему коду эти переменные разбросаны... а нужно же вставлять в определенное какое то место!
#74 Отдел разработки сайтов 2012-12-13 14:50:51
Цитата Александр

ну там по всему коду эти переменные разбросаны... а нужно же вставлять в определенное какое то место!

а для чего спрашивается выдержки из кода, для локализации места вставки:
if ($onlyPublished) {
$where[] = ' p.`published`="1" ';
}

или

if ($virtuemart_category_id > 0) {
#75 Павел 2012-12-28 16:11:54
У вас в примере (сайт кормящих мам) при отсутствии товара с таким размером пишется надпись "Товар не найден"... У меня же после всех сделанных замен кода, при выборе какого-либо размера через фильтр, всё исчезает (все товары) вместе с фильтрами. Вот примерhttp://i52.fastpic.ru/big/2012/1228/fc/1b1c462b3606f08384c22dcae8995dfc.png.

А так же не могу понять почему через фильтр не выводятся те товары, в которых прописан данный размер.

Спасибо за ответ. Всех с наступающим.
#76 Отдел разработки сайтов 2012-12-28 16:31:42
Цитата Павел
У меня же после всех сделанных замен кода, при выборе какого-либо размера через фильтр, всё исчезает (все товары) вместе с фильтрами.

В статье описываются изменения, которые требуются для создания фильтра, все прочее, предполагает самостоятельные доработки. Помимо фильтра в код вносились дополнительные модификации: http://2v3.su/src/blog/web/blog72.zip

Цитата Павел
А так же не могу понять почему через фильтр не выводятся те товары, в которых прописан данный размер.

Если все сделано верно, то товары должны были быть. Можете попробовать другой вариант:
http://2v3.su/blog/web/72.html
#77 Оксана 2013-01-27 22:11:14
Здравствуйте! Подскажите как можно реализовать фильтр товаров по размерам в virtuemart 1.9.? Очень нужно для магазина женской одежды. Могу заплатить за такое решение, т.к. срочно нужно реализовать этот фильтр.
#78 Отдел разработки сайтов 2013-01-28 06:08:40
Цитата Оксана
Подскажите как можно реализовать фильтр товаров по размерам в virtuemart 1.9.? Очень нужно для магазина женской одежды. Могу заплатить за такое решение, т.к. срочно нужно реализовать этот фильтр.

Фильтр для виртумарт 1.9 не делали, так что уточните детали ТЗ и отправьте нам на почту.
#79 Narek 2013-03-12 16:52:25
Извините за то что плохо говорю на русском...
У меня код сработал, но при выборе размера virtuemart тормозит и даже когда добавляю новые товары они очень поздно появляются на сайт. В чем проблема?
Заранее спасибо!
#80 Отдел разработки сайтов 2013-03-12 18:33:17
Цитата Narek
У меня код сработал, но при выборе размера virtuemart тормозит и даже когда добавляю новые товары они очень поздно появляются на сайт. В чем проблема?

Проблема может быть связана с хостингом на котором расположен сайт или же со скоростью работы вашего интернета. Если сайт расположен на локальном компьютере, то тогда причина может быть в производительности компьютера (его загруженности) или в настройках mysql-сервера. Причин много, так сразу и не ответить...
#81 Narek 2013-03-13 17:05:54
Проблема решилось после отключение кеша :) Как вижу админ сайта очень добрый и помогает всем... я профессиональный дизайнер и готов помочь вам, если что нибудь понадобится (бесплатно). :)
#82 Отдел разработки сайтов 2013-03-13 18:30:54
Цитата Narek
Как вижу админ сайта очень добрый и помогает всем...

Скажем так, я подсказываю то, что знаю, и там где не требуется затрачивать много времени, потому что у меня тоже заказы и сроки, времени всегда не хватает, даже статей пока новых по виртумарту не пишу.
Цитата Narek
я профессиональный дизайнер и готов помочь вам, если что нибудь понадобится (бесплатно). :)

Если возможно, то скиньте ссылку на портфолио сюда или на почту, поскольку у нас нет постоянного дизайнера, в основном делаем на шаблонах, так что, ваши услуги могут пригодиться, за деньги, разумеется.
#83 Николай 2013-05-23 16:45:17
Здравствуйте. А вы могли бы связаться со мной в скайпе portall.com.ua - очень надо сделать фильтр по нескольким полям для виртмарта но я совсем не программист
#84 Отдел разработки сайтов 2013-05-24 16:13:08
Цитата Николай
очень надо сделать фильтр по нескольким полям для виртмарта но я совсем не программист

В принципе тут расписано все, и тем более вы позиционируете себя как веб-студия, должны немного ориентироваться в коде. Если уж совсем никак, то тут только платно.
#85 Александр 2013-06-13 07:24:00
Здравствуйте... делал сразу сайт на хосте поставил фильтр как вы и учите все работало... перенес на хостинг удалил все старые товары начал заливать новые и почму то фильр рабоатет как то не правильно.. подскажите пожалуйста в чем причина.. вот страница на которой реализовон фильтр http://case-land.ru/apple-tablet/ipad-2-3.html
#86 Отдел разработки сайтов 2013-06-13 07:45:10
Цитата Александр
Здравствуйте... делал сразу сайт на хосте поставил фильтр как вы и учите все работало... перенес на хостинг удалил все старые товары начал заливать новые и почму то фильр рабоатет как то не правильно.. подскажите пожалуйста в чем причина.. вот страница на которой реализовон фильтр http://case-land.ru/apple-tablet/ipad-2-3.html

попробуйте сделать так: заменить $a=array(0=>'Любой'); на $a=array();
после ksort($a); вставить $a=array_merge(array(0=>'Любой'), $a);
#87 Александр 2013-06-13 07:50:02
Цитата Отдел разработки сайтов
Цитата Александр
Здравствуйте... делал сразу сайт на хосте поставил фильтр как вы и учите все работало... перенес на хостинг удалил все старые товары начал заливать новые и почму то фильр рабоатет как то не правильно.. подскажите пожалуйста в чем причина.. вот страница на которой реализовон фильтр http://case-land.ru/apple-tablet/ipad-2-3.html

Уточните, что значит неправильно? Я перешел на страницу, но там фильтра нет. IDs корзины остались прежние?

Выше двух товаров выводит стандартную сортировку а провее от нее написано слово "Аксесуары" Наведите на аксесуары и увидите что список выподает но изночально он отображается не так как нужно.. увидели?
#88 Отдел разработки сайтов 2013-06-13 07:52:48
Цитата Александр
Выше двух товаров выводит стандартную сортировку а провее от нее написано слово "Аксесуары" Наведите на аксесуары и увидите что список выподает но изночально он отображается не так как нужно.. увидели?

Да, я сразу не заметил, и отредактировал предыдущее сообщение.
#89 Александр 2013-06-13 08:00:51
Цитата Отдел разработки сайтов
Цитата Александр
Выше двух товаров выводит стандартную сортировку а провее от нее написано слово "Аксесуары" Наведите на аксесуары и увидите что список выподает но изночально он отображается не так как нужно.. увидели?

Да, я сразу не заметил, и отредактировал предыдущее сообщение.

Большое спасибо. У меня своя мини студия. если нужна помощь будет при верстке, создании дизайна образайтесь поможем с удовольствием!
#90 Отдел разработки сайтов 2013-06-13 08:05:05
Цитата Александр
У меня своя мини студия. если нужна помощь будет при верстке, создании дизайна образайтесь поможем с удовольствием!

Сейчас напишу вам на почту, есть вопрос по вашим ценам.
#91 Александр 2013-06-13 08:07:21
Цитата Отдел разработки сайтов
Цитата Александр
У меня своя мини студия. если нужна помощь будет при верстке, создании дизайна образайтесь поможем с удовольствием!

Сейчас напишу вам на почту, есть вопрос по вашим ценам.

будем рады сотрудничеству!
#92 Игорь 2013-06-20 03:27:40
Добрый день, помогите пожалуйста установить код, что только не делал, ничего не получается, сайт просто перестаёт работать.
#93 Отдел разработки сайтов 2013-06-20 04:09:10
Цитата Игорь
Добрый день, помогите пожалуйста установить код, что только не делал, ничего не получается, сайт просто перестаёт работать.

Вот пример http://2v3.su/src/blog/web/blog72.zip изменения кода в скриптах, только не нужно заменять файлы поверх старых, могут быть нестыковки в версиях VM.

Если на хостинге запрещен вывод php-ошибок в браузер, то посмотрите лог-файлы, и скопируйте ошибку сюда, скорее всего у вас допущена неточность в синтаксисе.

Подсказываю бесплатно, но работы от 500 руб.
#94 Morfiys 2013-12-11 00:19:57
Доброго времени суток!
Ктонибудь пробовал тестить на Joomla! 2.5.14 и VM 2.0.24? Оч полезная статья, но на указаных версиях не получается настроить, отпишитесь если у кого получилось или кто может помочь.
#95 Отдел разработки сайтов 2013-12-11 07:26:56
Цитата Morfiys
Ктонибудь пробовал тестить на Joomla! 2.5.14 и VM 2.0.24?

На VM 2.0.24 не тестировал, но должно работать. Внимательнее вносите корректировки. Для просмотра вставок, вот пример http://2v3.su/src/blog/web/blog72.zip (поверх копировать не нужно).
#96 Мария 2014-02-01 15:43:45
А нельзя ли прислать на почту пример заполненных файлов? Никак не могу разобраться, что куда подставить...
#97 Отдел разработки сайтов 2014-02-01 19:58:43
Цитата Мария
А нельзя ли прислать на почту пример заполненных файлов? Никак не могу разобраться, что куда подставить...

В верхнем сообщении же есть пример: http://2v3.su/src/blog/web/blog72.zip
#98 Артур 2014-03-12 11:41:01
Добрый день, Подскажите пожалуйста как можно сделать поиск по производителю. Например по "Название производителя" и по "категория производителя". Например, хочу найти всех производителей выпускающих детскую одежду, выбрать по наименованию производителя который понравится и потом уже посмотреть его товар.
#99 Отдел разработки сайтов 2014-03-12 12:59:37
Цитата Артур
как можно сделать поиск по производителю. Например по "Название производителя" и по "категория производителя".

Поиск по производителю это стандартный функционал виртумарта: Виртумарт – Настройки – Шаблоны – отметить Показывать производителей.
Что касается вывода категорий производителей, то вроде бы, они не выводятся стандартным образом, да и зачем, если есть категории товаров. Но если у вас нестандартная задача, то уже могу сделать в индивидуальном порядке.
#100 Денис 2014-03-14 15:25:38
Цитата Алексей
Спасибо большое все получилось, Вы все сказали верно еще в этом
Цитата Отдел разработки сайтов
для фильтра по обоим параметрам нужно изменить в administratorcomponentscom_virtuemartmodelsproduct.php: if (!empty($this->searchcustoms)){ $joinCustom = true ; foreach ($this->searchcustoms as $key => $searchcustom) { if($searchcustom=trim($searchcustom)){ $key=intval($key); $custom_search[$key] = '(pf'.$key.'.`virtuemart_custom_id`="'.$key.'" and pf'.$key.'.`custom_value` like "' . $this->_db->getEscaped( $searchcustom, true ) . '")'; } } if(count($custom_search)) $where[] = " ( ".implode(' AND ', $custom_search )." ) "; else{ $joinCustom=false; $this->searchcustoms=false; } } найти строку if ($this->searchcustoms) { и заменить: if ($this->searchcustoms) { foreach (array_keys($this->searchcustoms) as $key) { $joinedTables .= ' LEFT JOIN `#__virtuemart_product_customfields` as pf'.$key.' ON p.`virtuemart_product_id` = pf'.$key.'.`virtuemart_product_id` '; } } тестируйте, у меня просто под рукой нет товаров с различными параметрами.

посте я просто правильно не сделал второй пункт, и все получилось, еще раз спасибо


только не так $joinedTables .=
а так $joinedTables[] =

спасибо получилось тоже
#101 Отдел разработки сайтов 2014-03-14 15:32:56
Цитата Денис
только не так $joinedTables .=
а так $joinedTables[] =
спасибо получилось тоже

Ну, хорошо, что получилось. Что касается $joinedTables, то виртумарт от версии к версии изменяется, для новых, да, нужно добавлять в массив $joinedTables[].
#102 Елена 2014-05-27 21:44:48
почему то получается белый экран...
#103 Отдел разработки сайтов 2014-05-29 06:16:32
Цитата Елена
почему то получается белый экран...

Белый экран, это из-за какой-то ошибки, которую нужно смотреть в логах хостинга.

Специалист по видео

8 (929) 264 1523 (Константин)

cashara@bk.ru

Специалист по фото

8 (929) 261 3062 (Дмитрий)

Мультимедиа-студия «Два в кубе» © 2011 - 2015