嗨,我需要能够以编程方式删除产品自定义选项.
我做了这个功能:
public function removeOptions($option_name, $product_id) {
$product = Mage::getModel('catalog/product')->load($product_id);
$options = $product->getOptions();
foreach($options as $option) {
if(strtolower($option->getTitle()) == $option_name) {
unset($product->getOptions());
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到此错误'无法在写上下文中使用方法返回值'
我需要更改unset($ product-> getOptions()); 至?
贾森
一般的问题在于代码语法 - unset($product->getOptions());PHP要求将名称(变量,数组索引或对象属性)与其存储的值取消链接.但是,方法/函数调用返回的实体没有名称.即它不是变量,对象属性或数组索引,它只是一个纯值.所以要求unset()它没有意义.
它不是Magento错误,它违反了一般的PHP语法.
如果要在产品模型中取消设置选项,则需要采用其他方式.首先,您需要更改语法.其次,您需要注意,产品模型并非旨在动态更改自定义选项.
您有两种选择,如何实现所需的功能:
1)如果您只需删除选项并保存产品,则需要更改unset($product->getOptions());为
$optionsData = $option->getData();
$optionsData['is_delete'] = 1;
$product->setProductOptions(array($option->getId() => $optionsData));
$product->setCanSaveCustomOptions(true);
$product->save();
Run Code Online (Sandbox Code Playgroud)
再次加载产品将返回没有选项的产品:
$product = Mage::getModel('catalog/product')->load($product_id);
Run Code Online (Sandbox Code Playgroud)
2)如果您需要删除选项并继续使用相同的产品型号,则需要重写Product model类(本文将介绍如何执行此操作)并添加自定义方法以取消设置所需的属性.这就是重写课程的样子:
class MageDev_NewCatalog_Model_Product extends Mage_Catalog_Model_Product {
public function unsetOption($optionId) {
unset($this->_options[$optionId];
}
}
Run Code Online (Sandbox Code Playgroud)
然后你需要unset($product->getOptions());改为$product->unsetOption($option->getId()).