2011-07-05 24 views
8

kurtarmak alın, şu çağrısını kullanarak yapılandırılabilir ürüne bağlı basit ürünler elde etmek mümkündür Yapılandırılabilir ürün kaydedildikten sonra, kullandığı basit ürünlerin yeni listesini alabilirim. Bu yüzden yukarıdaki çağrıyı catalog_product_save_after olayının tetiklediği bir yöntemden yapıyorum. Ancak, $childProducts numaralı çağrıdan sonra, $product ile ilişkilendirilen basit ürünleri, sonradan kaydetme işleminden önce saklayın.yapılandırılabilir ürünün SONRA yapılandırılabilir ürüne ait basit ürünler magento olarak

Kaydetme işleminden sonra $product ile ilgili basit ürünleri nasıl alabilirim?

Şimdiden teşekkürler, herhangi bir öneri takdir edilir.

cevap

7

Magento'nun OOP sistemi çok iyi ve bu iyilik bazen yapıya henüz derinlemesine gitmeyenler için problem yaratıyor.

yakından "Mage_Catalog_Model_Product_Type_Configurable" sınıfında yöntemi "getUsedProducts()" izlerseniz, ("_configurableAttributes", "_usedProducts" gibi) özelliklerinin kullanımı ile birlikte, sağlanan bazı "if" mantıkları olduğunu göreceksiniz . Bunlar gerçek sonucu elde etmenizi engeller, fakat hata Magento değildir, bunun yerine hata Magento belgelerinin eksikliğinden kaynaklanır.

Bu yöntemin ilk birkaç hatları hakkında bana net edelim: - "$requiredAttributeIds" (yapılandırılabilir Özellik kimlikleri) & "$product" (yapılandırılabilir ürün nesne) -

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); 
    } 
    .... 

Bu yöntem 2 argüman vardır.

Bu yöntem çağrıldığında, "$requiredAttributeIds" parametresi için "null" iletiliyor, ancak "Yapılandırılabilir Ürün nesnesini doğru" $product "veriyorsunuz.

Bu sınıf, her Yapılandırılabilir Ürün nesnesi için ayarlanmış olan "_usedProducts" (çocuk basit ürünlerle ilgili verileri korumak için) özelliğine sahiptir. Bu değer daha önceden ayarlanmışsa, Magento size halihazırda var olan değerleri döndürür. Yapılandırılabilir ürün güncellemeden önce çocuk ürünlerini almanın ana nedeni budur.

Peki, yapabileceğiniz şey, tüm Önbellek işlemlerini yenilemenin yanı sıra, Tam Önbellek Deposunu temizlemenizdir. O zaman sonuçlarınız işe yarayacaktır, çünkü dahili olarak Magento tüm bu kullanılmış ürünleri önbellekte saklar.

Yardım edin.

+0

Detaylı cevap için teşekkürler, bunun en azından beni doğru yola koyduğunu düşünüyorum. Önbelleği temizlemeyi denedim (yani, her şeyi var/önbellekte silme) ancak yine de aynı sorunu yaşıyorum. Garip olan şey, eğer yapılandırılabilir ürünü tekrar kaydedersem, bununla ilişkili doğru ürünleri görebilirim. Bu yüzden bir kez kaydettikten sonra aradığım etkiyi elde etmek için iki kez kaydetmem gerekiyor. Ayrıca önerdiğiniz gibi Mage_Catalog_Model_Product_Type_Configurable sınıfını aramayı denedim, ancak uygulamayı/kod/çekirdek/Mage/Katalog/Model/Ürün/Tür/Yapılandırılabilir'de bulamadım. Nasıl buldun? – Epicurus

+0

Hangi Magento sürümünü kullanıyorsunuz? –

+6

Magento CE 1.5.1.0 kullanıyorum. Dosyayı bulmayı başardım (app/code/core/Mage/Catalog/Model/Product/Type/Configurable.php). Ve sen haklıydın, önbellek gerçekten sorun oldu.Ancak, sadece önbelleği temizlemek yeterli değildi. GetUsedProducts() 'işlevini çağırmadan önce' _cache_instance_products' özniteliğini açıkça kaldırmam gerekiyordu. Bunu, Mage :: getModel ('catalog/product_type_configurable') -> getProduct ($ product) -> unsetData ('_ cache_instance_products'); ' – Epicurus

İlgili konular