update
\Bitrix\Main\ORM\Data\UpdateResult public static \Bitrix\Catalog\Model\Price::update( $id, array $data );
Метод изменяет цену товара, обновляет внутренний кеш и запускает автоматические действия каталога. Статический метод. Метод унаследован от \Bitrix\Catalog\Model\Entity.
Параметры
| Параметр | Описание |
|---|---|
$id | Идентификатор цены. Значение должно быть больше нуля |
$data | Плоский массив изменяемых полей или структура с ключами fields, external_fields и actions. Подробное описание полей массива fields смотрите в описании метода add. Границы количества нужно передавать вместе |
Возвращаемое значение
Метод возвращает объект \Bitrix\Main\ORM\Data\UpdateResult. Через объект можно проверить результат и получить ошибки.
Особенности
Если меняется цена или валюта, метод пересчитывает значение в базовой валюте. Когда подготовка данных добавила внутренние действия, после успешного изменения метод может пересчитать цены по наценкам и минимальные цены родительского товара. При запуске этих действий метод обновляет время изменения элемента инфоблока.
Пример
Пример кода временно меняет существующую тестовую цену и восстанавливает исходное значение и валюту.
<?php
use Bitrix\Catalog\Model\Price;
use Bitrix\Main\Loader;
if (!Loader::includeModule('catalog'))
{
throw new RuntimeException('Не удалось подключить модуль catalog');
}
// Идентификатор тестовой цены, которую можно временно изменить
$priceId = 123;
// Код существующей валюты для временного значения
$currency = 'RUB';
try
{
$originalPrice = Price::getRow([
'select' => ['ID', 'PRICE', 'CURRENCY'],
'filter' => ['=ID' => $priceId],
]);
if ($originalPrice === null)
{
echo 'Цена не найдена';
return;
}
$updateResult = Price::update($priceId, [
'fields' => [
'PRICE' => 1000,
'CURRENCY' => $currency,
],
]);
if (!$updateResult->isSuccess())
{
echo implode(PHP_EOL, $updateResult->getErrorMessages());
return;
}
echo 'Цена временно изменена' . PHP_EOL;
$restoreResult = Price::update($priceId, [
'fields' => [
'PRICE' => $originalPrice['PRICE'],
'CURRENCY' => $originalPrice['CURRENCY'],
],
]);
if (!$restoreResult->isSuccess())
{
echo implode(PHP_EOL, $restoreResult->getErrorMessages());
return;
}
echo 'Исходная цена восстановлена';
}
catch (Throwable $exception)
{
echo $exception->getMessage();
}
Была ли эта страница полезна?
Что можно улучшить?
Пользовательские комментарии
Помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2026, «1С-Битрикс», 2026