2012-11-27 59 views
0

嗨我需要能够以编程方式删除产品自定义选项。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()); 
    } 

    } 

} 

但我收到此错误

什么我需要改变未设置($产品 - “中写入背景下不能使用方法的返回值” > getOptions());至?

杰森

回答

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)如果您需要删除选项,并继续使用相同的产品模式下工作l,那么你需要重写产品模型类(this article解释如何做到这一点)并添加你的自定义方法来取消你想要的属性。这是一个rewrited类会是什么样子:

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

+0

干杯安德烈,我去了第一个选项,它的工作完美。谢谢你花时间解释我做错了什么。这是一个很大的帮助 –

+0

不客气。那么你应该接受答案作为一个正确的答案。 –