TL; DR , Persyaratannya adalah memiliki tingkat persediaan persediaan ditampilkan pada halaman daftar produk kategori dengan sedikit pertanyaan tambahan / memori dengan kinerja dalam pikiran yang mematuhi kerangka kerja Magento.
Setelah membaca artikel Vinai Kopp tentang preloading untuk skalabilitas .
Apa cara terbaik untuk memasukkan level persediaan inventaris pada halaman daftar produk kategori ( list.phtml ) dengan sedikit pertanyaan / beban tambahan untuk kinerja?
Saya mengetahui beberapa pendekatan:
afterLoad () tampaknya berfungsi dengan baik denganmedia_gallery
penyertaan tanpa permintaan tambahan, namun saya belum berhasil menerapkan pendekatan yang sama dengan inventaris.
$attributes = $_product->getTypeInstance(true)->getSetAttributes($_product);
$media_gallery = $attributes['media_gallery'];
$backend = $media_gallery->getBackend();
$backend->afterLoad($_product);
SQL langsung untuk mengumpulkan data yang diperlukan secara paralel dengan pengumpulan dengan product_id
kunci misalnya. Tetapi mencari lebih banyak sarana melalui kerangka kerja.
Saat ini saya hanya memuat stock_item
objek melalui:
$_product->load('stock_item')->getTotalQty();
Yang berhasil, tapi saya perhatikan penambahan lebih banyak permintaan untuk mendapatkan total stok persediaan dari semua produk dalam koleksi.
...
__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)
...
anehnya, ini berhasil. Keajaiban terjadi di Mage_Eav_Model_Entity_Abstract-> memuat ($ objek, $ entitasId, $ atribut). Jika $ atribut kosong itu akan memanggil loadAllAttribute ($ objek). Jadi $ product-> load ('blah') akan memuat semua atribut yang hilang, termasuk 'media_gallery' - William Tran 19 Nov 14 pada jam 4:45
Tambahkan nilai yang diperlukan ke koleksi yang sudah dimuat.
Pendekatan sederhana yang jelas untuk menambahkan data yang diperlukan ke koleksi produksi tingkat atas di lapisan / filter, tampaknya akan menjadi pendekatan terbaik.
Saya memang melihat pengamat addInventoryDataToCollection () di Mage_CatalogInventory_Model_Observer yang kedengarannya akan mencapai itu, tetapi menambahkan metode ke pengamat modul khusus tampaknya tidak kompatibel.
<events>
<catalog_product_collection_load_after>
<observers>
<inventory>
<class>cataloginventory/observer</class>
<method>addInventoryDataToCollection</method>
</inventory>
</observers>
</catalog_product_collection_load_after>
</events>
Yang mengakibatkan:
Peringatan: Argumen tidak valid diberikan untuk foreach () di /app/code/core/Mage/CatalogInventory/Model/Resource/Stock/Item/Collection.php on line 71