Битрикс

Свойства типа Строка для выбора торговых предложений в Битрикс

Опубликовано

В result_modifier.php шаблона компонента catalog.element добавить это:

if(empty($arSKUPropList)){
		foreach($arResult["OFFERS"] as $arOffer){
			foreach($arOffer["PROPERTIES"] as $propName=>$arProp){
				if(in_array($propName,$arParams['OFFER_TREE_PROPS']) && $arProp["PROPERTY_TYPE"]=="S"){
if($arProp["VALUE"]!=""){
						$arProp["VALUE"] = str_replace("_"," ",$arProp["VALUE"]);//javascript разбивает массив по _
						$arResult["OFFERS"][$keyOffer]["PROPERTIES"][$propName]["VALUE"] = $arProp["VALUE"];
						$arResult["OFFERS"][$keyOffer]["DISPLAY_PROPERTIES"][$propName]["VALUE"] = $arProp["VALUE"];//свойство строковое, так что все ОК					if(!isset($arSKUPropList[$propName]["ID"])){
						$arSKUPropList[$propName]["ID"] = $arProp["ID"];
					}
					if(!isset($arSKUPropList[$propName]["CODE"])){
						$arSKUPropList[$propName]["CODE"] = $arProp["CODE"];
					}
					if(!isset($arSKUPropList[$propName]["NAME"])){
						$arSKUPropList[$propName]["NAME"] = $arProp["NAME"];
					}
					if(!isset($arSKUPropList[$propName]["SORT"])){
						$arSKUPropList[$propName]["SORT"] = $arProp["SORT"];
					}
					if(!isset($arSKUPropList[$propName]["PROPERTY_TYPE"])){
						$arSKUPropList[$propName]["PROPERTY_TYPE"] = $arProp["PROPERTY_TYPE"];
					}
					if(!isset($arSKUPropList[$propName]["LINK_IBLOCK_ID"])){
						$arSKUPropList[$propName]["LINK_IBLOCK_ID"] = $arProp["LINK_IBLOCK_ID"];
					}
					$arSKUPropList[$propName]["VALUES"][$arProp["VALUE"]] = array(//$arSKUPropList[$propName]["VALUES"][$arProp["PROPERTY_VALUE_ID"]] = array(
						"ID"=>$arProp["VALUE"],
						"NAME"=>$arProp["VALUE"],
						"OFFER_ID"=>$arOffer["ID"],
					);
					if(!isset($arSKUPropList[$propName]["SHOW_MODE"])){
						$arSKUPropList[$propName]["SHOW_MODE"] = "TEXT";
					}
					if(!isset($arSKUPropList[$propName]["VALUES_COUNT"])){
						$arSKUPropList[$propName]["VALUES_COUNT"] = 0;
					}
					$arSKUPropList[$propName]["VALUES_COUNT"]+=1;
}
				}
			}	
		}
		foreach($arSKUPropList as $propName=>$arProp){
			$values = $arSKUPropList[$propName]["VALUES"];
			ksort($values);
			$arSKUPropList[$propName]["VALUES"] = $values;
		}
		
		$arSKUPropIDs = array_keys($arSKUPropList);
	}

И добавить следующий фрагмент туда, где заполняется $arMatrix, между elseif (‘L’ == $arSKUPropList[$strOneCode][‘PROPERTY_TYPE’]) и elseif (‘E’ == $arSKUPropList[$strOneCode][‘PROPERTY_TYPE’])

elseif ('S' == $arSKUPropList[$strOneCode]['PROPERTY_TYPE'])
{
	$currentSku[$keyOffer][] = $arOffer['DISPLAY_PROPERTIES'][$strOneCode];
	$arCell['VALUE'] = $arOffer['DISPLAY_PROPERTIES'][$strOneCode]['VALUE'];
	//$arCell['PROPERTY_VALUE_ID'] = (int)$arOffer['DISPLAY_PROPERTIES'][$strOneCode]['PROPERTY_VALUE_ID'];
}

Выбор предложений идет по значению свойства, а не ID сохраненного значения; т.е. если будет два полностью одинаковых предложения с разной ценой — выбор не сработает; значения должны быть разными. Для нескольких свойств все также работает хорошо.