是否可以从订单更新产品自定义选项值?我知道物品在购物车中(结账前)是可能的,但我不确定订单是否可行.
我们的应用程序正在销售服务,我们有一个案例,只有在结账后才能获得所需的数据.
Iva*_*nyi 19
这取决于您的自定义的目的.订单项具有存储为序列化数组的自定义选项,您可以随时修改它.
与报价项目不同,在订单项目中,它具有不同的名称以便检索它们.该方法被调用getProductOptions()
还有另一种方法可以让你设置它们setProductOptions(array $options).
以下是在不同测试用例中使用此方法的一些示例:
如果您只需要将其存储为内部代码使用,您只需将选项添加到数组数组并将其设置回:
$existentOptions = $orderItem->getProductOptions();
$existentOptions['your_custom_option'] = $yourCustomValue;
$orderItem->setProductOptions($existentOptions);
Run Code Online (Sandbox Code Playgroud)如果需要在打印文档中显示自定义选项,则需要将自定义选项添加到选项的特殊选项中,这些选项具有在前端,pdf文档,项目列表中显示其值的结构
$existentOptions = $orderItem->getProductOptions();
if (!isset($existentOptions['additional_options'])) {
// If special options of options array is set before, create it.
$existentOptions['additional_options'] = array();
}
// Adding visible options value
$existentOptions['additional_options'][] = array(
'label' => 'Your Option Label',
'value' => 'Your Option Value',
// The last one that is optional (if not set, value is used)
'print_value' => 'Your Option Value shown in printed documents'
);
$orderItem->setProductOptions($existentOptions);
Run Code Online (Sandbox Code Playgroud)如果您需要一个对客户可见的选项以及您的代码所需的另一个选项,这两种方法甚至可以组合使用.
另外,在您进行修改后,请不要忘记保存订单/订单项目.
忠告
如果您保存订单并且尚未修改订单模型本身,则至少需要更改其中的一些数据,以强制订单模型保存所有子实体.为了实现这一点,您甚至可以设置一些不存在的属性.
不调用保存操作的情况:
$order->load($id);
$orderItem->getItemById($itemId);
$orderItem->setSomething(111);
$order->save(); // Order Item will not be saved!!
Run Code Online (Sandbox Code Playgroud)
将调用保存操作的情况:
$order->load($id);
$orderItem->getItemById($itemId);
$orderItem->setSomething(111);
$order->setSomeNonExistentProperty(true);
$order->save(); // Now it will be saved
Run Code Online (Sandbox Code Playgroud)
享受Magento开发的乐趣
| 归档时间: |
|
| 查看次数: |
9723 次 |
| 最近记录: |