Обсуждение Cherry Picker - фильтр товаров для virtuemart/FastSeller - работа с фильтрами

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

Да, хаки прописаны все.
Да, модуль был опубликован на всех страницах.
Включил вывод только там где нужно. Пропала эта ошибка.
Но осталась другая.
Код:
Warning: Invalid argument supplied for foreach() in /public_html/administrator/components/com_virtuemart/html/shop_browse_queries.php on line 237

Понятно, что это всего лишь Warning, но при этом, при попытке отсортировать по цене или по поступлениям список товаров, полученный в результате фильтрации Cherry Picker'ом - результат пустое окно и этот варнинг.
 
Часть кода с 237 строкой в студию - будем смотреть.
 
Код:
case "find_in_set_any":
					$comp = array();
		   	[B]237:[/B]            foreach($get_item_value as $value) {
						array_push($comp,"FIND_IN_SET('$value',REPLACE(`$parameter_name`,';',','))");
					}
					$comp = "(" . join($get_item_value_comp == "find_in_set_all"?" AND ":" OR ", $comp) . ")";
					$parameter_name = "";
					$get_item_value = "";
					break;
 
Замени полностью кусок кода от
// Filter Products by Product Type
до
//////////////////////////////////
// ASSEMBLE THE QUERY
/////////////////////////////////
// Filter Products by Product Type
if (!empty($product_type_id)) {
require_once (CLASSPATH."ps_product_type.php");
$ps_product_type = new ps_product_type();

// list parameters:
$q = "SELECT `parameter_name`, `parameter_type` FROM `#__{vm}_product_type_parameter` WHERE `product_type_id`='$product_type_id'";
$db_browse->query($q);

/*** GET ALL PUBLISHED PRODUCT WHICH MATCH PARAMETERS ***/
$join_array[] = "LEFT JOIN `#__{vm}_product_type_$product_type_id` ON `#__{vm}_product`.`product_id` = `#__{vm}_product_type_$product_type_id`.`product_id` ";
$join_array[] = "LEFT JOIN `#__{vm}_product_product_type_xref` ON `#__{vm}_product`.`product_id` = `#__{vm}_product_product_type_xref`.`product_id` ";
$where_clause[] = "`#__{vm}_product_product_type_xref`.`product_type_id`=$product_type_id ";

// find by parameters
while ($db_browse->next_record()) {
$parameter_name = $db_browse->f("parameter_name");
$item_name = "product_type_$product_type_id"."_".$parameter_name;
$get_item_value = vmGet($_REQUEST, $item_name, "");
$get_item_value_comp = vmGet($_REQUEST, $item_name."_comp", "");

if (is_array($get_item_value) ? count($get_item_value) : strlen($get_item_value) ) {
// comparison
switch ($get_item_value_comp) {
case "lt": $comp = " < "; break;
case "le": $comp = " <= "; break;
case "eq": $comp = " <=> "; break;
case "ge": $comp = " >= "; break;
case "gt": $comp = " > "; break;
case "ne": $comp = " <> "; break;
case "texteq":
$comp = " <=> ";
break;
case "like":
$comp = " LIKE ";
$get_item_value = "%".$get_item_value."%";
break;
case "notlike":
$comp = "COALESCE(`".$parameter_name."` NOT LIKE '%".$get_item_value."%',1)";
$parameter_name = "";
$get_item_value = "";
break;
case "in": // Multiple section List of values
$comp = " IN ('".join("','",$get_item_value)."')";
$get_item_value = "";
break;
case "fulltext":
$comp = "MATCH (`".$parameter_name."`) AGAINST ";
$parameter_name = "";
$get_item_value = "('".$get_item_value."')";
break;
case "find_in_set":
$comp = "FIND_IN_SET('$get_item_value',REPLACE(`$parameter_name`,';',','))";
$parameter_name = "";
$get_item_value = "";
break;
case "find_in_set_all":
case "find_in_set_any":
$comp = array();
foreach($get_item_value as $value) {
array_push($comp,"FIND_IN_SET('$value',REPLACE(`$parameter_name`,';',','))");
}
$comp = "(" . join($get_item_value_comp == "find_in_set_all"?" AND ":" OR ", $comp) . ")";
$parameter_name = "";
$get_item_value = "";
break;
}
switch ($db_browse->f("parameter_type")) {
case "D": $get_item_value = "CAST('".$get_item_value."' AS DATETIME)"; break;
case "A": $get_item_value = "CAST('".$get_item_value."' AS DATE)"; break;
case "M": $get_item_value = "CAST('".$get_item_value."' AS TIME)"; break;
case "C": $get_item_value = "'".substr($get_item_value,0,1)."'"; break;
default:
if( strlen($get_item_value) ) $get_item_value = "'".$get_item_value."'";
}
if( !empty($parameter_name) ) $parameter_name = "`".$parameter_name."`";
$where_clause[] = $parameter_name.$comp.$get_item_value." ";
}
}
$item_name = "price";
$get_item_value = vmGet($_REQUEST, $item_name, "");
$get_item_value_comp = vmGet($_REQUEST, $item_name."_comp", "");
// search by price
if (!empty($get_item_value)) {
// comparison
switch ($get_item_value_comp) {
case "lt": $comp = " < "; break;
case "le": $comp = " <= "; break;
case "eq": $comp = " = "; break;
case "ge": $comp = " >= "; break;
case "gt": $comp = " > "; break;
case "ne": $comp = " <> "; break;
}
$where_clause[] = "( ISNULL(product_price) OR product_price".$comp.$get_item_value." ) ";
$auth = $_SESSION['auth'];
// get Shopper Group
$sgq = "( ISNULL(`#__{vm}_product_price`.`shopper_group_id`) OR `#__{vm}_product_price`.`shopper_group_id` IN (";
$comma="";
if ($auth["user_id"] != 0) { // find user's Shopper Group
$q2 = "SELECT `shopper_group_id` FROM `#__{vm}_shopper_vendor_xref` WHERE `user_id`='".$auth["user_id"]."'";
$db_browse->query($q2);
while ($db_browse->next_record()) {
$sgq .= $comma.$db_browse->f("shopper_group_id");
$comma=",";
}
}
// find default Shopper Groups
$q2 = "SELECT `shopper_group_id` FROM `#__{vm}_shopper_group` WHERE `default` = 1";
$db_browse->query($q2);
while ($db_browse->next_record()) {
$sgq .= $comma.$db_browse->f("shopper_group_id");
$comma=",";
}
$sgq .= "\n )) ";
$where_clause[] = $sgq;
}

}

// search by price functionality
global $mosConfig_absolute_path;
require_once($mosConfig_absolute_path.'/modules/mod_vm_cherry_picker/controller.php');
$chp=new chpController();
$w=$chp->getVMPriceQuery();
if($w)$where_clause[]=$w;

//////////////////////////////////
// ASSEMBLE THE QUERY
//////////////////////////////////

Галочка в каждом параметре стоит?
Show Possible Values as Multiple select" checked "On"
 
Ваш приведенный код полностью совпадает с моим, ну кроме пары опечаток с лишними пробелами. Т.е. ситуация не поменялась.
На счет "галочек". Если Вы имеете в виду
"Показывает допустимые значения для выпадающего списка?:"
то нет, ни в одном параметре она не стоит. Это разве может относиться к данной проблеме?
Обсуждение такой же ошибки я нашел на другом форуме, но решения так и не было выявлено. Может поможет.
USER1:
Совсем забыл если отмечать чекбокс и жать поиск возникают 2 предупреждения:
Warning: Invalid argument supplied for foreach() in /var/www/administrator/components/com_virtuemart/html/shop_browse_queries.php on line 233
USER2:
foreach листает массив, а ты чекбоксами или выпадающми меню, как я например, выдаешь ему вместо массива единичную переменную. Вот и ругается. Хотя варнинг это только предупреждение, а не ошибка.

P.S. Проставив галочки, ошибка исчезла. Спасибо!
 
Не давно появился Cherry Picker 2, в нем гораздо больше возможностей подробнее тут

Теперь можно регулировать ползунками не только цену, видимо можно добавлять для некоторых параметров цвета или фоновые изображения. Надо бы уже такой искать, новую версию.
 
Буду рад благодарности не только в карму но и в wm ;)
Копил на пиво, пришлось купить)

ЗЫ Хайд не обсуждается!!!
 
2 sasisa

По поводу ошибки shop_browse_queries.php on line 237
Я так понимаю должно помочь вот это... по крайней мере у меня в данном файле так... )))
Код:
case "in": // Multiple section List of values
					//$comp = " IN ('".join("','",$get_item_value)."')";
					$comp = " IN ('".( is_array($get_item_value) ? join("','",$get_item_value) : $get_item_value )."')";   // mod!!! When using a product type parameter search, if a single value is returned from a 'multiple' field, a problem occurs in shop_browse_queries because the code expects an array

P.S.: если ошибаюсь, прошу не судить строго ... я не программер))) ... а всего лишь делаю свой первый сайт)))
 
Назад
Сверху