0

こんにちは私はプログラムで製品のカスタムオプションを削除できるようにする必要があります。

私はこの関数を作りました:

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());を変更するには何が必要ですか。に?

ジェイソン

4

1 に答える 1

6

一般的な問題はコード構文にあり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())

于 2012-11-27T19:15:22.780 に答える