[TL: DR]
Tôi có Core_Class_A
và Core_Class_B extends Core_Class_A
.
Tôi cần phải viết lại cả hai và thêm một chức năng chung.
Vì vậy, tôi đã thực hiện điều này :
Custom_Class_A extends Core_Class_A
.
Câu hỏi là tôi nên sử dụng cái nào từ bên dưới (ngón tay cái lên và ngón cái xuống cho mỗi cái):
Custom_Class_B extends Custom_Class_A
Custom_Class_B extends Core_Class_B
[Phiên bản đầy đủ]
Tôi đang làm việc trên một tiện ích mở rộng có thêm bộ lọc mới trong điều hướng được xếp lớp: trong kho / hết hàng (bạn sẽ thấy nó công khai sau vài ngày).
Mã, không có vấn đề lớn cho đến nay, chiến lược ... Tôi có nghi ngờ của tôi.
Vì không có sự kiện nào tôi có thể sử dụng trong phần điều hướng được xếp lớp để thêm bộ lọc mới của mình, tôi đã phải viết lại 2 khối: Mage_Catalog_Block_Layer_View
và Mage_CatalogSearch_Block_Layer
. (Nếu ai đó có ý tưởng tốt hơn, vui lòng chia sẻ, nhưng điều này không nằm trong phạm vi câu hỏi).
Đối với Mage_Catalog_Block_Layer_View
tôi, tôi đã làm như Vinai nghĩ về tôi một cách gián tiếp ( xem đánh giá này về một trong những tiện ích mở rộng của Vinai ).
Tôi đã thêm các phương thức tôi muốn viết lại, chỉ cần gọi parent::methodName()
và gửi một sự kiện mà mọi người có thể quan sát.
Dưới đây là một ví dụ cho phương pháp _initBlocks
. Phương pháp mới của tôi trông như thế này:
protected function _initBlocks()
{
parent::_initBlocks(); //call the parent method
//dispatch an event that I can observe and add my logic.
Mage::dispatchEvent('catalog_layer_view_init_blocks', array('block' => $this));
}
Nhưng vấn đề xảy ra Mage_CatalogSearch_Block_Layer
. Khối này mở rộng cái đầu tiên Mage_Catalog_Block_Layer_View
.
Ví dụ tôi cần viết lại phương thức _initBlocks
như hình trên. Nhưng vấn đề là Mage_CatalogSearch_Block_Layer
không có _initBlocks
phương pháp riêng . nó sử dụng một từ lớp cha Mage_Catalog_Block_Layer_View
.
Tôi phải làm gì ở đây?
Tôi có nên sử dụng cùng một hệ thống như trên hay tôi chỉ nên làm cho lớp mới [Namespace]_[Module]_Block_Catalogsearch_Layer
của mình mở rộng lớp của riêng tôi mà tôi đã tạo để viết lại Mage_Catalog_Block_Layer_View
và chỉ sao chép các phương thức khác nhau từ Mage_CatalogSearch_Block_Layer
?.