$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);
$order->load($id);
$orderItem->getItemById($itemId);
$orderItem->setSomething(111);
$order->save(); // Order Item will not be saved!!
调用保存操作的情况:
$order->load($id);
$orderItem->getItemById($itemId);
$orderItem->setSomething(111);
$order->setSomeNonExistentProperty(true);
$order->save(); // Now it will be saved
3条答案
按热度按时间s4chpxco1#
这取决于您的自定义目的。订单项目具有存储为序列化数组的自定义选项,您可以随时对其进行修改。
与报价项不同,在订单项中,它有不同的名称来检索它们。该方法称为
getProductOptions()
此外,还有另一种方法,允许您设置它们
setProductOptions(array $options)
。以下是在不同测试用例中使用此方法的一些示例:
1.如果只需要存储它以供内部代码使用,则只需将option添加到array array中,然后将其设置回去即可:
1.如果你需要在打印文档中显示你的自定义选项,你需要将你的自定义选项添加到选项的特殊选项中,这些选项具有在前端,pdf文档,项目列表中显示其值的结构
如果您需要一个对客户可见的选项和另一个代码所需的选项,甚至可以将这两种方法结合使用。
也不要忘记保存您的订单/订单项目后,你做你的修改.
建议
如果您保存了订单,并且没有修改订单模型本身,那么您至少需要修改订单模型中的一些数据,以强制订单模型保存所有子实体,为了实现这一点,您甚至可以设置一些不存在的属性。
不调用保存操作的情况:
调用保存操作的情况:
玩得开心Magento开发
vltsax252#
你可以在addProduct函数上做,然后再下订单.
yi0zb3m43#
我回复了一个旧帖子。它可能会帮助一些人。
为了改进Ivan的回答,你需要在更新后保存条目。
这里我的代码:
此外,对于您的测试,您可以通过运行以下命令清除测试顺序的选项:
最后,您可以在订购的产品中找到定制选项数据,以完成您的$existentOptions ['additional_options'] []:
Axel