как Изменить commerce_order_total

Главные вкладки

Аватар пользователя postgres postgres 24 февраля 2015 в 15:15

Нужно переписать commerce_order_total.

Делаю стандартным способом, потом устаревшим способом - не получается. Очевидно что есть проблема но не могу понять в чем.

$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
$order_wrapper->commerce_order_total->amount = 4200;
$order_wrapper->save();

или так:

$order->commerce_order_total['und'][0]['amount'] = 4200;
$order->commerce_order_total['und'][0]['data']['components'][0]['price']['amount'] = 4200;
commerce_order_save($order);

В обеих случаях после сохранения commerce_order_total->amount равен нулю.
ТО есть даже существующее значение в базе данных сбрасывавется в "0".

И где искать лекарство?

Комментарии

Аватар пользователя man-1982 man-1982 24 февраля 2015 в 16:08

Все верно. Может где то еще хук некий задействован?

<?php
$order_wrapper 
entity_metadata_wrapper('commerce_order'$order);
$order_wrapper->commerce_order_total->amount round(4200);
$order_wrapper->save();
dpm($order'Order affter save');
?>

Посмотри данные сразу после сохранения.

Аватар пользователя postgres postgres 24 февраля 2015 в 17:47

Ну да, я вижу что сразу после сохранения происходит обновление объекта и сумма равно 0.
Пришлось идти в обход хуков, через field_sql_storage_field_storage_write

Аватар пользователя man-1982 man-1982 25 февраля 2015 в 9:25

Ну как вариант решения "по быстрому" подойдет, а так надо разобраться где он обнуляет.
Попробуй этот код

<?php
$order_wrapper 
entity_metadata_wrapper('commerce_order'$order);
$order_wrapper->commerce_order_total->amount round(4200);
?>

без ->save
записать в hook_entity_presave. Должон нормально отработать.