- не работает CPrice::SetBasePrice в обработчике изменения элемента
- не работает CPrice::SetBasePrice в обработчике изменения элемента
- не добавляются цены методом cprice::add
- не добавляются цены методом cprice::add
- GetBasePrice
- Описание и параметры
- Параметры вызова
- Возвращаемые значения
- Примеры использования
- Пользовательские комментарии
не работает 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
Источник
GetBasePrice
Описание и параметры
Метод возвращает базовую цену товара с кодом PRODUCT_ID. Базовая цена — это цена базового типа цен. Нестатический метод.
Параметры вызова
| Параметр | Описание | С версии |
|---|---|---|
| productID | Код товара или торгового предложения (ID элемента инфоблока). |
До версии 4.0.4 параметр назывался PRODUCT_ID.
Возвращаемые значения
Возвращает ассоциативный массив с ключами:
| Код | Описание |
|---|---|
| ID | Код ценового предложения. |
| PRODUCT_ID | Код товара или торгового предложения (ID элемента инфоблока). |
| EXTRA_ID | Код наценки. |
| CATALOG_GROUP_ID | Код типа цены. |
| PRICE | Базовая цена. |
| CURRENCY | Валюта базовой цены. |
| QUANTITY_FROM | Количество товара, начиная с приобретения которого действует эта цена. |
| QUANTITY_TO | Количество товара, при приобретении которого заканчивает действие эта цена. |
Примеры использования
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Источник