Установка свойств элемента инфоблока (в чём и состоит окончательная задача агента) производится с помощью стандартного метода Битрикса CIBlockElement::SetPropertyValuesEx(). В данном методе имеется событие OnAfterIBlockElementSetPropertyValuesEx. Если повесить на это событие обработчик, то возможно модифицировать тем или иным способом работу агента.

Задача: для товаров нужно устанавливать свойство типа флажок (Да/Нет) - "Товар со скидкой".

Модуль работает со свойством AFP_DISCOUNT_VALUE типа "Число" для записи величины скидки и множественным свойством AFP_DISCOUNT_LIST типа "Число" для записи списка применяемых к этому товару скидок. Различные применения для данных свойств описаны в данном документе, но они не являются исчерпывающими. То, что требуется в данной задаче, может быть использовано, например, в умном фильтре для того, чтобы пользователь мог в каталоге отобрать все товары, имеющие скидку. С использованием только свойств данного модуля это сделать сложно, поэтому и требуется дополнительное свойство, которое можно устанавливать через обработчик.

Пример обработчика для решения данной задачи.

В Битриксе нет штатного типа свойства "Флажок". Один из вариантов того, как можно реализовать такое свойство - список с одним элементом "Да".

Данный код необходимо разместить в файле /bitrix/php_interface/init.php (если такого файла нет, его нужно создать). Если вы точно не уверены в том, как это делается, то лучше обратиться к опытным разработчикам на Битриксе - неправильное заполнение данного файла может сломать ваш сайт без возможности восстановления по HTTP.

<?function OnAfterIBlockElementSetPropertyValuesExHandler($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $FLAGS)
{
if($PROPERTY_VALUES["AFP_DISCOUNT_VALUE"]>0)
{
	CIBlockElement::SetPropertyValuesEx(
		$ELEMENT_ID,
		$IBLOCK_ID,
		array(
			"HAS_DISCOUNT"=>1 //подставьте код вашего свойства "Товар со скидкой" (свойство типа список) и ID значения "Да"
		)
	);
	\Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID,$ELEMENT_ID);
}
elseif(isset($PROPERTY_VALUES["AFP_DISCOUNT_VALUE"]) && $PROPERTY_VALUES["AFP_DISCOUNT_VALUE"]==0)
{
	CIBlockElement::SetPropertyValuesEx(
		$ELEMENT_ID,
		$IBLOCK_ID,
		array(
			"HAS_DISCOUNT"=>null //подставьте код вашего свойства "Товар со скидкой"
		)
	);
	\Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID,$ELEMENT_ID);
}
}
AddEventHandler("iblock", "OnAfterIBlockElementSetPropertyValuesEx", "OnAfterIBlockElementSetPropertyValuesExHandler");

0  


 Страница настроек модуля | Описание курса | Честное голосование