Magento删除产品自定义选项

时间:2012-11-27 17:46:04

标签: php magento

您好我需要能够以编程方式删除产品自定义选项。

我已经完成了这个功能:

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());
    }

  }

}

但我收到此错误'无法在写上下文中使用方法返回值'

我需要更改unset($ product-> getOptions());到?

杰森

1 个答案:

答案 0 :(得分:6)

一般问题在于代码语法 - 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();

再次加载产品会返回没有选项的产品:

$product = Mage::getModel('catalog/product')->load($product_id);

2)如果您需要删除选项并继续使用相同的产品型号,那么您需要重写产品型号类(this article解释如何执行此操作)并添加您的自定义方法以取消设置您的属性想。这就是重写课程的样子:

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())