一般的问题在于代码语法 -unset($product->getOptions());
告诉 PHP 将名称(变量、数组索引或对象属性)与其存储的值取消链接。但是,方法/函数调用返回的实体没有名称。即它不是变量、对象属性或数组索引,它只是一个纯值。所以调用unset()
它是没有意义的。
这不是 Magento 错误,它违反了一般的 PHP 语法。
如果您想在 Product 模型中取消设置选项,那么您需要采用其他方式。首先,您需要更改语法。其次,您需要注意 Product 模型并非旨在动态更改自定义选项。
您有两个选择,如何实现所需的功能:
1)如果您只需要删除选项并保存产品,那么您需要更改unset($product->getOptions());
为
$optionsData = $option->getData();
$optionsData['is_delete'] = 1;
$product->setProductOptions(array($option->getId() => $optionsData));
$product->setCanSaveCustomOptions(true);
$product->save();
再次加载产品将返回您没有选项的产品:
$product = Mage::getModel('catalog/product')->load($product_id);
2)如果您需要删除选项并继续使用相同的 Product 模型,那么您需要重写 Product 模型类(本文解释了如何做到这一点)并添加您的自定义方法以取消设置您想要的属性。这就是重写的类的样子:
class MageDev_NewCatalog_Model_Product extends Mage_Catalog_Model_Product {
public function unsetOption($optionId) {
unset($this->_options[$optionId];
}
}
然后,您需要更改unset($product->getOptions());
为$product->unsetOption($option->getId())
.