1. добавить в конце файла class.php
// usovdm perfomance fix
CModule::IncludeModule("iblock");
class SmartFilterCIBlockElement extends CIBlockElement
{
public static function GetPropertyValues($IBLOCK_ID, $arElementFilter)
{
global $DB;
$IBLOCK_ID = intval($IBLOCK_ID);
$VERSION = CIBlockElement::GetIBVersion($IBLOCK_ID);
$arElementFilter["IBLOCK_ID"] = $IBLOCK_ID;
$element = new CIBlockElement;
$element->strField = "ID";
$element->GetList(array(), $arElementFilter, false, false, array("ID"));
$q = 'SELECT DISTINCT `PROPERTY_ID` FROM `b_iblock_section_property` WHERE `SMART_FILTER` = "Y" AND `IBLOCK_ID` = '.$IBLOCK_ID;
$db = $DB->Query($q);
$propertyIDs = array();
while($propertyID = $db->fetch()){
$propertyIDs[] = $propertyID['PROPERTY_ID'];
}
if ($VERSION == 2)
$strSql = "
SELECT
BEP.*
FROM
".$element->sFrom."
INNER JOIN b_iblock_element_prop_s".$IBLOCK_ID." BEP ON BEP.IBLOCK_ELEMENT_ID = BE.ID
WHERE 1=1 ".$element->sWhere."
ORDER BY
BEP.IBLOCK_ELEMENT_ID
";
else
$strSql = "
SELECT
BE.ID IBLOCK_ELEMENT_ID
,BEP.IBLOCK_PROPERTY_ID
,BEP.VALUE
,BEP.VALUE_NUM
FROM
".$element->sFrom."
LEFT JOIN b_iblock_element_property BEP ON BEP.IBLOCK_ELEMENT_ID = BE.ID
AND BEP.VALUE != ''".(!empty($propertyIDs) ? " AND BEP.IBLOCK_PROPERTY_ID IN (".implode(', ', $propertyIDs).")" : "")."
WHERE 1=1 ".$element->sWhere."
ORDER BY
BEP.IBLOCK_ELEMENT_ID
";
$rs = new CIBlockPropertyResult($DB->Query($strSql));
$rs->setIBlock($IBLOCK_ID);
return $rs;
}
}
2. В component.php заменить дважды GetPropertyValues по примеру
// $rsElements = CIBlockElement::GetPropertyValues($this->IBLOCK_ID, $arElementFilter);
$rsElements = SmartFilterCIBlockElement::GetPropertyValues($this->IBLOCK_ID, $arElementFilter); // usovdm perfomance fix
Свежие комментарии