TL; DR , Yêu cầu là có một mức tồn kho trong kho được hiển thị trên trang danh sách sản phẩm danh mục với ít truy vấn / bộ nhớ bổ sung với hiệu suất trong tâm trí tuân thủ khuôn khổ của Magento.
Sau khi đọc bài viết của Vinai Kopp về tải trước cho khả năng mở rộng .
Cách tốt nhất để bao gồm các mức tồn kho trong các trang liệt kê sản phẩm danh mục ( list.phtml ) với một vài truy vấn / tải bổ sung cho các mức hiệu suất là gì?
Tôi biết một vài cách tiếp cận:
afterLoad () dường như hoạt động tốt khimedia_gallery
đưa vào mà không cần truy vấn bổ sung, tuy nhiên tôi đã không thực hiện thành công cách tiếp cận tương tự với hàng tồn kho.
$attributes = $_product->getTypeInstance(true)->getSetAttributes($_product);
$media_gallery = $attributes['media_gallery'];
$backend = $media_gallery->getBackend();
$backend->afterLoad($_product);
SQL trực tiếp để thu thập dữ liệu cần thiết song song với bộ sưu tập với một product_id
khóa chẳng hạn. Nhưng tìm kiếm nhiều hơn một phương tiện thông qua khuôn khổ.
Hiện tại tôi chỉ đơn giản là tải stock_item
đối tượng qua:
$_product->load('stock_item')->getTotalQty();
Cái nào hoạt động, nhưng tôi nhận thấy việc thêm nhiều truy vấn để lấy tổng số hàng tồn kho của tất cả các sản phẩm trong bộ sưu tập.
...
__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)
...
Thật kỳ lạ, điều này hoạt động. Phép thuật xảy ra trong Mage_Eav_Model_Entity_Abauge-> load ($ object, $ entityId, $ thuộc tính). Nếu các thuộc tính $ trống, nó sẽ gọi loadAllAttribution ($ object). Vì vậy, $ sản phẩm-> tải ('blah') sẽ tải tất cả các thuộc tính bị thiếu, bao gồm 'media_gallery' - William Tran ngày 19 tháng 11 '14 lúc 4:45
Thêm các giá trị cần thiết vào bộ sưu tập đã được tải.
Cách tiếp cận đơn giản rõ ràng của việc thêm dữ liệu cần thiết vào bộ sưu tập sản xuất cấp cao nhất trong lớp / bộ lọc, dường như là cách tiếp cận tốt nhất.
Tôi đã nhận thấy một người quan sát addInventoryDataToCollection () trong Mage_CatalogInventory_Model_Observer nghe có vẻ như sẽ đạt được điều đó, nhưng việc thêm phương thức vào một mô-đun tùy chỉnh mà người quan sát có vẻ không tương thích.
<events>
<catalog_product_collection_load_after>
<observers>
<inventory>
<class>cataloginventory/observer</class>
<method>addInventoryDataToCollection</method>
</inventory>
</observers>
</catalog_product_collection_load_after>
</events>
Kết quả nào trong:
Cảnh báo: Đối số không hợp lệ được cung cấp cho foreach () trong /app/code/core/Mage/CatalogInventory/Model/Resource/Stock/Item/Collection.php trên dòng 71