Cprice add не работает

не добавляются цены методом cprice::add

Написал обработчик но цена не приходит

AddEventHandler(«iblock», «OnAfterIBlockElementUpdate», Array(«MyClass2», «OnAfterIBlockElementUpdateHandler»));

class MyClass2
<
// создаем обработчик события «OnAfterIBlockElementUpdate»
function OnAfterIBlockElementUpdateHandler(&$arFields)
<
if (intval($arFields[«IBLOCK_ID»]) == 49)
<

$db_res = CPrice::GetList(
array(),
array(
«PRODUCT_ID» => intval($arFields[«ID»]),
«CATALOG_GROUP_ID» => 9,
)
);
if ($ar_res2 = $db_res->Fetch())
<
$price=intval($ar_res2[«PRICE»]);
>

$arFields2 = Array(
«PRODUCT_ID» => intval($arFields[«ID»]),
«CATALOG_GROUP_ID» => 11,
«PRICE» => intval($price_new),
«CURRENCY» => «RUB»,
«CAN_BUY» => «Y»,
«CAN_ACCESS» => «Y»
);
$res = CPrice::GetList(
array(),
array(
«PRODUCT_ID» => intval($arFields[«ID»]),
«CATALOG_GROUP_ID» => 11,
)
);
if ($arr = $res->Fetch())
<
CPrice::Update(intval($arr[«ID»]), $arFields2);
if($arFields[«RESULT»])
AddMessage2Log(«1Запись с кодом «.$arFields[«ID»].» изменена.».» || Скидка=».$DISCOUNT.» Цена=».$price.» Новая цена=».$price_new);
else
AddMessage2Log(«1Ошибка изменения записи «.$arFields[«ID»].» («.$arFields[«RESULT_MESSAGE»].»).»);

>
else
<
$q=CPrice::Add($arFields2);
$arPrice = CPrice::GetByID(11);
if($arFields[«RESULT»])
AddMessage2Log(«2Запись с кодом «.$arFields[«ID»].» изменена.».» || Скидка=».$DISCOUNT.» Цена=».$price.» Новая цена=».intval($price_new).» q=».$q.» тип цены=».$arr[«CATALOG_GROUP_NAME»]);
else
AddMessage2Log(«2Ошибка изменения записи «.$arFields[«ID»].» («.$arFields[«RESULT_MESSAGE»].»).»);

>
>
>
> выводил логи и смотрел все нормально

2012-02-27 19:32:19 — — 2Запись с кодом 406932 изменена. || Скидка=10 Цена=964 Новая цена=867 IBLOCK=49 q=17541806
MyClass2::OnAfterIBlockElementUpdateHandler

Источник

не работает CPrice::SetBasePrice в обработчике изменения элемента

не работает CPrice::SetBasePrice в обработчике изменения элемента

Цитата
AddEventHandler(«iblock», «OnAfterIBlockElementUpdate», Array(«CatalogTools», «test»));

class CatalogTools <
function test(&$arFields) <
CModule::IncludeModule(‘catalog’);
CPrice::SetBasePrice(13,13,’USD’);
>

возвращает true, но базовая цена не меняется..

если просто написать в консоли

Цитата
CModule::IncludeModule(‘catalog’);
CPrice::SetBasePrice(13,13,’USD’);

Найти эту строчку и разобраться, что к чему, можно в файлах /bitrix/modules/catalog/admin/templates/product_edit_action.php и /bitrix/modules/catalog/admin/templates/subproduct_edit_acti ­on.php.

Вкратце: фишка в том, что $arUpdatedIDs завязан на текстовых полях цен, которые передаются в POST, и попадают туда только те значения, которые в текстовом поле цены. Если цена в поле не указана, то в массив ничего не попадает, а то, что не попадает, удаляется.

Решается эта проблема дополнительным обработчиком OnBeforeProductPriceDelete , который должен возвратить false, запрещая удаление.

По ссылкам в разделах документации всё хорошо описано и с примерами.

Источник

не работает CPrice::SetBasePrice в обработчике изменения элемента

не работает CPrice::SetBasePrice в обработчике изменения элемента

Цитата
AddEventHandler(«iblock», «OnAfterIBlockElementUpdate», Array(«CatalogTools», «test»));

class CatalogTools <
function test(&$arFields) <
CModule::IncludeModule(‘catalog’);
CPrice::SetBasePrice(13,13,’USD’);
>

возвращает true, но базовая цена не меняется..

если просто написать в консоли

Цитата
CModule::IncludeModule(‘catalog’);
CPrice::SetBasePrice(13,13,’USD’);

Найти эту строчку и разобраться, что к чему, можно в файлах /bitrix/modules/catalog/admin/templates/product_edit_action.php и /bitrix/modules/catalog/admin/templates/subproduct_edit_acti ­on.php.

Вкратце: фишка в том, что $arUpdatedIDs завязан на текстовых полях цен, которые передаются в POST, и попадают туда только те значения, которые в текстовом поле цены. Если цена в поле не указана, то в массив ничего не попадает, а то, что не попадает, удаляется.

Решается эта проблема дополнительным обработчиком OnBeforeProductPriceDelete , который должен возвратить false, запрещая удаление.

По ссылкам в разделах документации всё хорошо описано и с примерами.

Источник

не добавляются цены методом cprice::add

Написал обработчик но цена не приходит

AddEventHandler(«iblock», «OnAfterIBlockElementUpdate», Array(«MyClass2», «OnAfterIBlockElementUpdateHandler»));

class MyClass2
<
// создаем обработчик события «OnAfterIBlockElementUpdate»
function OnAfterIBlockElementUpdateHandler(&$arFields)
<
if (intval($arFields[«IBLOCK_ID»]) == 49)
<

$db_res = CPrice::GetList(
array(),
array(
«PRODUCT_ID» => intval($arFields[«ID»]),
«CATALOG_GROUP_ID» => 9,
)
);
if ($ar_res2 = $db_res->Fetch())
<
$price=intval($ar_res2[«PRICE»]);
>

$arFields2 = Array(
«PRODUCT_ID» => intval($arFields[«ID»]),
«CATALOG_GROUP_ID» => 11,
«PRICE» => intval($price_new),
«CURRENCY» => «RUB»,
«CAN_BUY» => «Y»,
«CAN_ACCESS» => «Y»
);
$res = CPrice::GetList(
array(),
array(
«PRODUCT_ID» => intval($arFields[«ID»]),
«CATALOG_GROUP_ID» => 11,
)
);
if ($arr = $res->Fetch())
<
CPrice::Update(intval($arr[«ID»]), $arFields2);
if($arFields[«RESULT»])
AddMessage2Log(«1Запись с кодом «.$arFields[«ID»].» изменена.».» || Скидка=».$DISCOUNT.» Цена=».$price.» Новая цена=».$price_new);
else
AddMessage2Log(«1Ошибка изменения записи «.$arFields[«ID»].» («.$arFields[«RESULT_MESSAGE»].»).»);

>
else
<
$q=CPrice::Add($arFields2);
$arPrice = CPrice::GetByID(11);
if($arFields[«RESULT»])
AddMessage2Log(«2Запись с кодом «.$arFields[«ID»].» изменена.».» || Скидка=».$DISCOUNT.» Цена=».$price.» Новая цена=».intval($price_new).» q=».$q.» тип цены=».$arr[«CATALOG_GROUP_NAME»]);
else
AddMessage2Log(«2Ошибка изменения записи «.$arFields[«ID»].» («.$arFields[«RESULT_MESSAGE»].»).»);

>
>
>
> выводил логи и смотрел все нормально

2012-02-27 19:32:19 — — 2Запись с кодом 406932 изменена. || Скидка=10 Цена=964 Новая цена=867 IBLOCK=49 q=17541806
MyClass2::OnAfterIBlockElementUpdateHandler

Источник

не добавляются цены методом cprice::add

Написал обработчик но цена не приходит

AddEventHandler(«iblock», «OnAfterIBlockElementUpdate», Array(«MyClass2», «OnAfterIBlockElementUpdateHandler»));

class MyClass2
<
// создаем обработчик события «OnAfterIBlockElementUpdate»
function OnAfterIBlockElementUpdateHandler(&$arFields)
<
if (intval($arFields[«IBLOCK_ID»]) == 49)
<

$db_res = CPrice::GetList(
array(),
array(
«PRODUCT_ID» => intval($arFields[«ID»]),
«CATALOG_GROUP_ID» => 9,
)
);
if ($ar_res2 = $db_res->Fetch())
<
$price=intval($ar_res2[«PRICE»]);
>

$arFields2 = Array(
«PRODUCT_ID» => intval($arFields[«ID»]),
«CATALOG_GROUP_ID» => 11,
«PRICE» => intval($price_new),
«CURRENCY» => «RUB»,
«CAN_BUY» => «Y»,
«CAN_ACCESS» => «Y»
);
$res = CPrice::GetList(
array(),
array(
«PRODUCT_ID» => intval($arFields[«ID»]),
«CATALOG_GROUP_ID» => 11,
)
);
if ($arr = $res->Fetch())
<
CPrice::Update(intval($arr[«ID»]), $arFields2);
if($arFields[«RESULT»])
AddMessage2Log(«1Запись с кодом «.$arFields[«ID»].» изменена.».» || Скидка=».$DISCOUNT.» Цена=».$price.» Новая цена=».$price_new);
else
AddMessage2Log(«1Ошибка изменения записи «.$arFields[«ID»].» («.$arFields[«RESULT_MESSAGE»].»).»);

>
else
<
$q=CPrice::Add($arFields2);
$arPrice = CPrice::GetByID(11);
if($arFields[«RESULT»])
AddMessage2Log(«2Запись с кодом «.$arFields[«ID»].» изменена.».» || Скидка=».$DISCOUNT.» Цена=».$price.» Новая цена=».intval($price_new).» q=».$q.» тип цены=».$arr[«CATALOG_GROUP_NAME»]);
else
AddMessage2Log(«2Ошибка изменения записи «.$arFields[«ID»].» («.$arFields[«RESULT_MESSAGE»].»).»);

>
>
>
> выводил логи и смотрел все нормально

2012-02-27 19:32:19 — — 2Запись с кодом 406932 изменена. || Скидка=10 Цена=964 Новая цена=867 IBLOCK=49 q=17541806
MyClass2::OnAfterIBlockElementUpdateHandler

Источник

Читайте также:  Не работает часть электрооборудования
Оцените статью