TL; DR , ความต้องการคือการมีระดับสต็อคสินค้าคงคลังที่แสดงในหน้ารายการผลิตภัณฑ์หมวดหมู่ที่มีการสืบค้น / หน่วยความจำเพิ่มเติมเล็กน้อยเพียงเล็กน้อยโดยคำนึงถึงประสิทธิภาพที่สอดคล้องกับกรอบของวีโอไอพี
หลังจากอ่านบทความวินัย Kopp ในการพรีโหลดสำหรับความยืดหยุ่น
วิธีที่ดีที่สุดในการรวมระดับสต็อกสินค้าคงคลังในหน้ารายการผลิตภัณฑ์หมวดหมู่คือ ( list.phtml ) ที่มีการค้นหา / โหลดเพิ่มเติมสำหรับการปฏิบัติงานให้น้อยลง
ฉันรู้วิธีการบางอย่าง:
afterLoad ()ดูเหมือนว่าทำงานได้ดีกับmedia_gallery
การรวมโดยไม่มีการค้นหาเพิ่มเติม แต่ฉันไม่ประสบความสำเร็จในการใช้วิธีการเดียวกันกับคลังโฆษณา
$attributes = $_product->getTypeInstance(true)->getSetAttributes($_product);
$media_gallery = $attributes['media_gallery'];
$backend = $media_gallery->getBackend();
$backend->afterLoad($_product);
Direct SQLเพื่อรวบรวมข้อมูลที่ต้องการควบคู่ไปกับการรวบรวมด้วยproduct_id
คีย์เช่น แต่มองหาวิธีการเพิ่มเติมผ่านกรอบ
ขณะนี้ฉันกำลังโหลดstock_item
วัตถุผ่าน:
$_product->load('stock_item')->getTotalQty();
ใช้งานได้จริง แต่ฉันสังเกตเห็นว่ามีการเพิ่มข้อความค้นหาเพิ่มเติมเพื่อรับผลรวมสต็อคสินค้าคงคลังของผลิตภัณฑ์ทั้งหมดในคอลเลกชัน
...
__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)
...
แปลกงานนี้ ความมหัศจรรย์เกิดขึ้นใน Mage_Eav_Model_Entity_Abstract-> load ($ object, $ entityId, $ attribute) ถ้า $ attribute นั้นว่างเปล่ามันจะเรียก loadAllAttribute ($ object) ดังนั้น $ product-> load ('blah') จะโหลดแอตทริบิวต์ที่หายไปทั้งหมดรวมถึง 'media_gallery' - William Tran 19 พ.ย. 14 '14 ที่ 4:45
เพิ่มค่าที่ต้องการลงในคอลเล็กชันที่โหลดแล้ว
วิธีง่าย ๆ ที่ชัดเจนของการเพิ่มข้อมูลที่ต้องการลงในคอลเลกชันการผลิตระดับสูงสุดในเลเยอร์ / ตัวกรองดูเหมือนจะเป็นวิธีที่ดีที่สุด
ฉันสังเกตเห็นผู้สังเกตการณ์addInventoryDataToCollection ()ในMage_CatalogInventory_Model_Observerที่ดูเหมือนว่ามันจะบรรลุผลดังกล่าว แต่การเพิ่มวิธีการในโมดูลผู้สังเกตการณ์แบบกำหนดเองนั้นดูเหมือนจะไม่เข้ากัน
<events>
<catalog_product_collection_load_after>
<observers>
<inventory>
<class>cataloginventory/observer</class>
<method>addInventoryDataToCollection</method>
</inventory>
</observers>
</catalog_product_collection_load_after>
</events>
ซึ่งผลลัพธ์ใน:
คำเตือน: อาร์กิวเมนต์ที่ระบุไม่ถูกต้องสำหรับ foreach () ใน /app/code/core/Mage/CatalogInventory/Model/Resource/Stock/Item/Collection.php ที่บรรทัดที่ 71