TL; DR , Gereksinim, Magento'nun çerçevesine uygun performans göz önünde bulundurularak, kategori ürün listeleme sayfasında envanter stok seviyesinin görüntülenmesi, ek sorguların / hafızanın az olması ile gösterilmektedir.
Vinai Kopp'un ölçeklenebilirlik için önyükleme hakkındaki makalesini okuduktan sonra .
Envanter stok düzeylerini, kategori ürün listeleme sayfalarına ( list.phtml ), performans paketleri için birkaç sorgu / yük ekleyerek eklemenin en iyi yolu nedir ?
Birkaç yaklaşımın farkındayım:
afterLoad ()media_gallery
ek sorgular olmadan dahil etmeile iyi çalışıyor gibi görünüyor, ancak aynı yaklaşımı envanter ile uygulamakta başarılı olamadım .
$attributes = $_product->getTypeInstance(true)->getSetAttributes($_product);
$media_gallery = $attributes['media_gallery'];
$backend = $media_gallery->getBackend();
$backend->afterLoad($_product);
product_id
Örneğin bir anahtarla koleksiyona paralel olarak gerekli verileri toplamak için SQL'i yönlendirin . Ancak çerçeve içinde daha fazla araç aramak.
Şu anda sadece stock_item
üzerinden nesne yüklüyorum :
$_product->load('stock_item')->getTotalQty();
Hangi işe yarıyor, ancak koleksiyondaki tüm ürünlerin envanter stok toplamlarını almak için daha fazla sorgu eklendiğini fark ediyorum.
...
__EAV_LOAD_MODEL__ (Mage_Catalog_Model_Product, id: stock_item, attributes: NULL)
__EAV_LOAD_MODEL__ (Mage_Catalog_Model_Product, id: stock_item, attributes: NULL)
__EAV_LOAD_MODEL__ (Mage_Catalog_Model_Product, id: stock_item, attributes: NULL)
...
garip bir şekilde, bu işe yarıyor. Sihir Mage_Eav_Model_Entity_Abstract-> load ($ object, $ entityId, $ attributes) içinde gerçekleşir. $ Öznitelikleri boşsa, loadAllAttribute ($ object) öğesini çağırır. $ Product-> load ('blah'), 'media_gallery' dahil olmak üzere tüm eksik özellikleri yükleyecektir - William Tran 19 Kasım 14 '14 4:45
Önceden yüklenmiş koleksiyona gerekli değerleri ekleyin.
Katman / filtredeki üst düzey üretim koleksiyonuna ihtiyaç duyulan verileri eklemenin bariz basit yaklaşımı en iyi yaklaşım gibi görünmektedir.
Ben fark ediyoruz gözlemci yaptılar addInventoryDataToCollection () içinde Mage_CatalogInventory_Model_Observer böyle sesler böyle ulaşmak, ancak uyumlu olacak şekilde görünmüyor özel modülleri gözlemci yöntemi ekleme söyledi.
<events>
<catalog_product_collection_load_after>
<observers>
<inventory>
<class>cataloginventory/observer</class>
<method>addInventoryDataToCollection</method>
</inventory>
</observers>
</catalog_product_collection_load_after>
</events>
Sonuç:
Uyarı: 71. satırdaki /app/code/core/Mage/CatalogInventory/Model/Resource/Stock/Item/Collection.php içindeki foreach () için geçersiz argüman sağlandı