не добавляются цены методом 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
Источник