$ product-> getOptions()は空の結果を返します


9

私が作成したカスタムブロックで製品のカスタムオプション値を含む製品の詳細を取得しようとしています。これは、製品の詳細ページで使用したコードであり、そこで機能しましたが、カスタムブロックページで使用しようとすると、get Optionsは空の値を返します。

if($ _product-> getId()){  
    foreach($ _product-> getOptions()as $ opt){  
    echo $ optionType = $ opt-> getType();  
      if($ optionType == 'drop_down'){  
        $ values = $ opt-> getValues();  
        foreach($ values as $ v)
        {
     $ mydata = $ v-> getTitle();      
print_r($ mydata);    
        }
      }  
    }   
}

私はmagentoが初めてなので、ここで何が欠けているのかわかりません。
誰かにヒントを教えてもらえますか
ありがとう


関連するスレッドからこの回答を参照してください。
quickshiftin 2016

回答:


2

これを試して:

if (Mage::registry('current_product')) {
    $product = Mage::registry('current_product');
} else {
    $product = Mage::getSingleton('catalog/product');
}


if ($product->getId()) {
    if ($product->hasCustomOptions()) {
        foreach ($product->getOptions() as $option) {
            $optionType = $option->getType();
            if ($optionType == 'drop_down') {
                $values = $option->getValues();
                foreach ($values as $k => $value) {
                    print_r($value);
                }
            }

        }
    }
}

1
機能していません...配列$ prodctを印刷すると、同じコードが製品ビューページで
正常に機能している

2

問題は、製品がブロックに完全にロードされていないことです。このload()メソッドは、オブジェクトのすべての情報が確実に読み込まれるようにします。loadByAttribute()またはコレクションのみを使用する場合、これは当てはまりません。

例は次のとおりです。

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

複数の製品を表示するload()場合は、パフォーマンスに大きな影響があるため、使用は避けてください。コレクションへのオプションの追加はお手伝いできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.