2011-07-05 18 views
8

を保存取得、次の呼び出しを使用して設定可能な製品に関連したシンプルな製品を得ることが可能です設定可能な製品が保存された後、私はそれが使用する単純な製品の新しいリストを得ることができます。だから私はcatalog_product_save_afterイベントによって引き起こされるメソッドから上記の呼び出しを行っています。ただし、$childProductsのコールの後には、保存操作の前に$productに関連付けられたシンプルな製品が保存されます。設定可能な製品AFTER設定可能製品に属するシンプルな製品は、Magentoので

保存操作後に$productに関連付けられたシンプルな製品を取得するにはどうすればよいですか?

ありがとうございました。ご意見ありがとうございます。

答えて

7

マゼンタのOOPシステムは非常に優れています。この優しさは、まだ構造に深く入り込んでいない人にとっては問題を引き起こすことがあります。

あなたが密接に「Mage_Catalog_Model_Product_Type_Configurable」クラスのメソッド「getUsedProducts()」に従うならば、あなたは(「_configurableAttributes」、「_usedProducts」のような)そのプロパティの使用方法とともに、提供されるいくつかの「if」論理があることがわかります。これらは実際の結果を得るのを妨げますが、障害はMagentoではなく、代わりにMagentoのマニュアルがないためです。

このメソッドの最初の数行について、あなたは私が明らかにしてみましょう: - "$requiredAttributeIds"(設定可能な属性のID)& "$product"(設定可能な製品オブジェクト) -

Varien_Profiler::start('CONFIGURABLE:'.__METHOD__); 
if (!$this->getProduct($product)->hasData($this->_usedProducts)) { 
    if (is_null($requiredAttributeIds) and is_null($this->getProduct($product)->getData($this->_configurableAttributes))) { 
     // If used products load before attributes, we will load attributes. 
     $this->getConfigurableAttributes($product); 
     // After attributes loading products loaded too. 
     Varien_Profiler::stop('CONFIGURABLE:'.__METHOD__); 
     return $this->getProduct($product)->getData($this->_usedProducts); 
    } 
    .... 

このメソッドは、2つの引数を持っています。

このメソッドを呼び出すときは、パラメータ "$requiredAttributeIds"に "null"を渡していますが、正しい構成可能な製品オブジェクト "$product"を指定しています。

このクラスには、Configurable Productオブジェクトごとに設定された(子単純な製品のデータを維持するための)プロパティ "_usedProducts"があります。この値が以前に設定されている場合、Magentoはすでに使用可能な値を返します。これは、構成可能な製品が更新される前に子製品を入手する主な理由です。

したがって、すべてのキャッシュ・プロセスをリフレッシュするとともに、キャッシュ・ストレージ全体をクリアすることができます。内部でMagentoがこれらの使用済み製品データをすべてキャッシュに保存するため、結果が有効になることがあります。

希望します。

+0

詳細な回答をいただきありがとうございます。私はこれが少なくとも私を正しい方向に向けると思います。キャッシュをクリアしてみました(つまり、var/cache内のすべてを削除しています)が、同じ問題が発生しています。奇妙なことは、設定可能な製品を再度保存すると、関連する正しいシンプルな製品が表示されることです。だから私は一度貯蓄した後に探していた効果を得るために2回節約しなければならない。私はあなたの提案のようなMage_Catalog_Model_Product_Type_Configurableクラスを探してみましたが、app/code/core/Mage/Catalog/Model/Product/Type/Configurableで見つけられませんでした。どうやって分かったの? – Epicurus

+0

使用しているMagentoのバージョンはどれですか? –

+6

Magento CE 1.5.1.0を使用しています。私はファイル(app/code/core/Mage/Catalog/Model/Product/Type/Configurable.php)を見つけることができました。そして、あなたは正しいです、キャッシュは確かに問題でした。しかし、単にキャッシュをクリアするだけでは不十分でした。 'getUsedProducts()'を呼び出す前に '_cache_instance_products'属性を明示的に設定解除する必要がありました。私は 'Mage :: getModel( 'catalog/product_type_configurable') - > getProduct($ product) - > unsetData( '_ cache_instance_products'); ' – Epicurus

関連する問題