кто знает как разобраться с фильтрацией по характеристикам - мультиспискам (характеристика - как множественный список)
если характеристика "мультисписок", то фильтр учитывает только те значения, которые стоят первые (мне так кажется) в списке характеристик конкретного товара.
Например, есть четыре товара
A - размеры 1, 2, 3, 4
B - размеры 1, 2, 3
C - размеры 2, 3
D - размеры 3, 4
начинаем фильтровать
если ставим галочку на размере 1 - всплывает "найдено 2", и при "показать" выводит 2 товара. все ОК
но если размер 2 (т.е. размер не первый в списке размеров именно в этом товаре) - всплывает "найдено 1", а при "показать" выводит все 3 товара.
если 3 размер - всплывает "найдено 1", а при "показать" выводит все 4 товара.
а если 4 размер (нигде не первый в списке, ни в одном товаре), то всплывает "найдено 1", а при "показать" выводит все как положено - 2 товара.
эта переменная
$num_selected_products = &JSFilterModel::getNumSelectedProductsForCategory($mainstream_id, $field__mainstream_id, $price_from_for_select, $price_to_for_select, $ch_fields, $altstream_fields, $field__altstream_id);
вроде как рассчитывается здесь lib/jsfilter_model.php
кусок кода, который ИМХО за это отвечает
//ajax
function getNumSelectedProductsForCategory($mainstream_id, $field__mainstream_id, $fprice_from=0, $fprice_to=0, $extra_fields=false, $altstream_fields=false, $field__altstream_id=false)
{
$db = &JFactory::getDBO();
$where = "";
if(is_array($extra_fields))
{
$i=0;
foreach($extra_fields as $ch_key => $characteristic) {
$j=0;
foreach($characteristic as $fieldvalue) {
if(count($characteristic) == 1) break;
if($fieldvalue == '0')
{
//if($i==0)
if($where=="")
{
$where.= "AND (";
}
else
{
$where.= ") AND (";
}
}
else
{
if($j==0)
{
$where.= "";
}
else
{
$where.= " OR ";
}
$where.= "extra_field_".$ch_key."=".$fieldvalue;
$j = 1;
}
}
$i = 1;
//$old_ch_key = $ch_key;
}
if($where != "") $where.= ")";
}
if(is_array($altstream_fields))
{
$count_fields = count($altstream_fields);
$i=0;
foreach($altstream_fields as $field_id) {
if($count_fields == 1) break;
if($field_id == '0')
{
$where.= " AND (";
}
else
{
if($i==1)
{
$where.= "";
}
else
{
$where.= " OR ";
}
$where.= $field__altstream_id." = ".$field_id;
}
$i++;
}
if($count_fields > 1) $where.= ")";
}
if($fprice_from!=0 || $fprice_to!=0)
{
$where.= " AND ((prod.product_price/curr.currency_value) BETWEEN $fprice_from AND $fprice_to)";
}
$dbquery = "SELECT
COUNT(prod.product_id) AS count_prod
FROM
#__jshopping_products AS prod,
#__jshopping_products_to_categories AS pr_cat,
#__jshopping_currencies AS curr
WHERE
pr_cat.product_id = prod.product_id
AND
curr.currency_id = prod.currency_id
AND
".$field__mainstream_id." = ".$mainstream_id."
".$where;
/*
$fp=fopen('test1.txt',"w");
fwrite($fp, $dbquery);
fclose($fp);
*/
$db->setQuery($dbquery);
// $rows = $db->loadObjectList();
$result = $db->loadResult();
return $result;
}
кто видит, где бок и почему при "показать" выводит все товары правильно?