Tóm tắc
Tôi có một vấn đề trong đó bởi Cửa hàng Magento tôi đang làm việc đã được định cấu hình để sử dụng các sản phẩm được nhóm với các sản phẩm đơn giản được liên kết. Các sản phẩm này có thể được lọc theo các thuộc tính / giá trị sản phẩm như được định cấu hình trong quản trị viên.
Hành vi hiện tại
- Khả năng hiển thị của các sản phẩm đơn giản được đặt thành Không hiển thị riêng lẻ .
- Các sản phẩm đơn giản khi tìm kiếm được hiển thị bởi sản phẩm nhóm của họ .
Khi người dùng cuối lọc các sản phẩm kết quả theo màu và ví dụ màu đỏ , các sản phẩm được nhóm lại với các sản phẩm đơn giản gắn liền với nó có một giá trị thuộc tính cho màu sắc của màu đỏ được hiển thị.
Hành vi dự kiến (sau khi tùy chỉnh)
- Khả năng hiển thị của các sản phẩm đơn giản được đặt thành Không hiển thị riêng lẻ .
- Các sản phẩm đơn giản khi tìm kiếm được hiển thị bởi sản phẩm nhóm của họ .
Khi người dùng cuối lọc các kết quả của sản phẩm theo màu (chỉ) thay vì các sản phẩm được nhóm được hiển thị, sản phẩm đơn giản đó sẽ được hiển thị.
Logic của tôi là - Tôi có thể phát hiện các bộ lọc thông qua các tham số yêu cầu. Khi bộ lọc màu đã được đặt, tôi ghi đè kết quả sản phẩm bằng cách nào đó .
Khi tôi nói bằng cách nào đó những gì tôi muốn nói, đây là phần mà tôi gặp khó khăn khi giải quyết vấn đề đơn giản của mình. Làm thế nào tôi có thể giải quyết vấn đề này?
Kết luận / Nỗ lực
Dưới đây là danh sách những nỗ lực tôi đã nghĩ ra và chơi xung quanh để thấy nó không hoàn toàn giải quyết vấn đề của tôi hoặc đơn giản là không giải quyết được vấn đề của tôi.
Quan sát catalog_controller_category_init_before
:
Tôi nghĩ khi tôi quan sát _initCategory()
phương pháp tôi có thể ghi đè lên bố cục trong đó tôi có khả năng có thể thay đổi cấu hình Magento để hiển thị các sản phẩm đơn giản và các sản phẩm không được nhóm.
Tuy nhiên, nó dường như $this->loadLayout()
không bao giờ được gọi, vì vậy tôi phải ghi đè lên getLayout
hoặc viewAction
các phương thức trên CategoryController
chính nó.
Ghi đè rõ ràng CategoryContoder để thực hiện thay đổi bố cục:
Tôi hoàn nguyên các điều trên và quyết định theo đuổi tùy chọn thứ hai của mình là ghi đè chức năng. Bắt đầu với việc mở rộng Mage_Catalog_CategoryController
bộ điều khiển.
Thử nghiệm đầu tiên của tôi là ghi đè lên loadLayout
, sau khi biết điều này không bao giờ được gọi, sau đó tôi quyết định ghi đè getLayout
vào thời điểm này, tôi không chắc mình sẽ làm gì.
Ghi đè Mage_Catalog_Block_Product_List
:
Tôi quyết định rằng tùy chọn tốt hơn là mở rộng khối thực tế có các mô hình và bộ sưu tập cần thiết. Trong khối của tôi, tôi ghi đè getProductsListHtml
phương thức, tôi nhanh chóng tìm hiểu toàn bộ HTML đã được phân tích cú pháp, thực thi và tạo.
Vì vậy, tôi không thể đơn giản.
- Lắng nghe cho
$this->getRequest()->getParams()
; - Lặp lại các sản phẩm được nhóm để có được các sản phẩm liên quan phù hợp với bộ lọc của tôi;
Quan sát catalog_product_collection_load_after
sự kiện:
Lần này tôi nghĩ rằng tôi có thể quan sát bộ sưu tập mô hình và thay đổi nhiệm vụ để thay đổi kết quả khi bộ lọc của tôi đã được đặt. Do đó tôi nhận được $observer->getEvent()->getCollection()
và cập nhật truy vấn dựa trên các bộ lọc của mình.
Điều này không hoạt động vì tôi có thể xóa các sản phẩm được nhóm, nhưng các sản phẩm đơn giản sẽ không hiển thị vì khả năng hiển thị.