@symply_rabbit

Как записать значение в свойство битрикса у всех товаров?

Добрый вечер! проблема в следующем-нужно добавить значение к свойству у всех товаров. но добавляется только к одному товару если мы в $arFilter пишем "ID"=>"707" тогда значение записывается в свойство. но когда я удаляю эту надпись "ID"=>"707" и код записи значения в свойства выполнялся ко всем товарам - он не работает. код ниже. в чем моя ошибка?
<?
Cmodule::IncludeModule('catalog');
CModule::IncludeModule("iblock"); 
?>




<?
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*");
$arFilter = Array("IBLOCK_ID"=>18, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);
while($ob = $res->GetNextElement()){ 

 $arFields = $ob->GetFields();  
//print_r($arFields);

echo $arFields[ID];?><br><?
 $arProps = $ob->GetProperties();


//print_r($arProps);
//echo $arProps[TSENA_ZA_KG][VALUE];

// предполагаем, что валюты RUB и EUR существуют в базе
$val = $arProps[TSENA_ZA_KG][VALUE]; // сумма в EUR
$newval = round(CCurrencyRates::ConvertCurrency($val, "EUR", "RUB"), 2);
echo $newval;


// добавление в свойство "по цене"

CIBlockElement::SetPropertyValuesEx($arFields[ID], false, array("PRICE_FILTER" => $newval));


$arFields = array("PRICE_FILTER" => $newval);// зарезервированное количество
CCatalogProduct::Update($arFields[ID], $arFields);


}
?>
  • Вопрос задан
  • 549 просмотров
Пригласить эксперта
Ответы на вопрос 2
@freekirill
Пишу под Битрикс
"nPageSize"=>50 - стоит выводка 50 товаров. т.е. действия выполниться только для 50 первых товаров.
Ответ написан
Комментировать
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
1) Не забывайте про то что ключи массивов это строки. $arProps[TSENA_ZA_KG][VALUE] -> $arProps["TSENA_ZA_KG"]["VALUE"]

2) У Вас вот тут ерунда написана.:
$arFields = array("PRICE_FILTER" => $newval);// зарезервированное количество
CCatalogProduct::Update($arFields["ID"], $arFields);


CCatalogProduct::Update - Это метод из модуля Catalog, который обновляет параметры товара (b_catalog_product), а не элемента инфоблока.

Вы в этот метод передаете не существующее поле "PRICE_FILTER". Скорее всего у вас отключен вывод ошибок PHP и когда происходит ошибка, у вас прекращается дальнейшее выполнение скрипта без вывода какой либо информации на экран.

3) Как уже написали, в CIblockElement::GetList задан параметр "nPageSize"=>50. Из за него будет выбрано только 50 элементов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы