Liệu có bất kỳ sự khác biệt nào cho dù tôi khai báo <observers> của mình bên trong <global>, <frontend>, <default>, <admin>, <adminthtml>?


7

Nhìn bề ngoài, tất cả dường như hoạt động. Có bất kỳ ý nghĩa / hậu quả ít rõ ràng của việc chọn cái này hơn cái kia không?

Câu trả lời:


5

Magento có ba "khu vực" theo mặc định: frontend, adminhtmlinstall, được sử dụng để tách một vài điều như bản dịch và thiết kế.

Khu vực được tải và thiết lập một lần khi Magento được khởi tạo, xem Mage_Core_Model_App_Area::load()chi tiết. Bạn sẽ nhận thấy một khu vực bổ sung admin, nhưng có vẻ như điều này không được sử dụng (bất cứ nơi nào nữa?). Một số mô-đun có thể thêm các khu vực mới, ví dụ testbởi EcomDev_PHPUnit.

Người quan sát cũng được xác định cho mỗi khu vực, nhưng ngoài ra, bạn có thể xác định sau đó <global>để họ áp dụng trong tất cả các khu vực.

Chỉ những người quan sát được xác định trong khu vực hiện tại và trong globalsẽ được thực thi. Các nhà quan sát toàn cầu luôn đến đầu tiên.

Xác định một người quan sát trong <default>hoặc <admin>thực sự không nên làm việc gì cả.


Cảm ơn câu trả lời của bạn. Bạn đã viết khu vực "cài đặt". Ý của bạn là khu vực "toàn cầu" (Mage_Core_Model_App_Area :: AREA_GLOBAL)?
fris

1
Không, ý tôi là install- nó được sử dụng trong thuật sĩ cài đặt Magento. Hãy xem Mage_Install_Controller_Action(thực ra cái này dường như chỉ được sử dụng cho chủ đề, vì vậy bạn không thể tạo người quan sát cụ thể cho install)
Fabian Schmengler

11

Nếu bạn gọi người quan sát giữa <frontend></frontend>thì sự kiện người quan sát đó sẽ chỉ được thực hiện trên frontend. Nếu bạn viết giữa <adminhtml></adminhtml>nó sẽ chỉ được thực hiện trong phần phụ trợ và nếu bạn viết giữa <global></global>thì sự kiện người quan sát sẽ hoạt động trên cả frontend và backend.

ví dụ: lấy một sự kiện gọi là "core_block_abauge_prepare_layout_after"

Trường hợp 1:-

<adminhtml>
    <events>
      <core_block_abstract_prepare_layout_after>
      </core_block_abstract_prepare_layout_after>
    </events>
</adminhtml>

Sự kiện quan sát "<core_block_abstract_prepare_layout_after>" sẽ chỉ hoạt động trong phần phụ trợ

Trường hợp 2: -

<frontend>
    <events>
      <core_block_abstract_prepare_layout_after>
      </core_block_abstract_prepare_layout_after>
    </events>
</frontend>

Sự kiện quan sát "<core_block_abstract_prepare_layout_after>" sẽ chỉ hoạt động ở frontend

Trường hợp 3: -

<global>
    <events>
      <core_block_abstract_prepare_layout_after>
      </core_block_abstract_prepare_layout_after>
    </events>
</global>

Sự kiện quan sát viên "<core_block_abstract_prepare_layout_after>" sẽ chỉ hoạt động ở ngoại vi và phụ trợ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.