一般的な問題はコード構文にありunset($product->getOptions());
ます-PHPに対して、名前(変数、配列インデックス、またはオブジェクトプロパティ)を格納する値からリンク解除するように指示します。ただし、メソッド/関数呼び出しによって返されるエンティティには名前がありません。つまり、変数、オブジェクトプロパティ、または配列インデックスではなく、純粋な値です。したがって、それを呼び出すunset()
ことは意味がありません。
これはMagentoエラーではなく、一般的なPHP構文に違反しています。
製品モデルのオプションの設定を解除する場合は、別の方法で行う必要があります。まず、構文を変更する必要があります。次に、製品モデルはカスタムオプションを動的に変更するようには設計されていないことに注意する必要があります。
必要な機能を実装する方法という2つのオプションがあります。
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)オプションを削除して同じ製品モデルで作業を続ける必要がある場合は、製品モデルクラスを書き直し(この記事ではその方法を説明します)、カスタムメソッドを追加して必要なプロパティの設定を解除する必要があります。これは、書き直されたクラスがどのように見えるかです。
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())
。