Magento Event

Nhận xét sản phẩm này

Tình trạng: Còn hàng

0,00 US$
Hoặc

Xem nhanh

Magento Event

Magento Event

More Views

Magento Event

1. Hệ thống Event – Observer trong Magento

Điều quan trọng trước tiên cần nhắc lại , đó là nguyên tắc cơ bản mà Hệ thống Event – Observer trong Magento hoạt động: 

Khi một bên gửi đi một event (khi một customer login, load hay save một model, …), một bên khác lắng nghe event nhất định và thực hiện logic của nó khi event đó được gửi đi.

 - Để gửi đi một sự kiện, ta sử dụng đoạn code như sau:

 images

 

 - Để bắt một event, đầu tiên ta khai báo trong file NameSpace/YourModule/etc/config.xml 

images

 Trong đó:

global             : scope – có thể là global, frontend, adminhtml

event_name : tên của event, khai báo trong hàm Mage::dispatchEvent();

unique_id      : cần là duy nhất trong tất cả module đang chạy trên site

class              : class sẽ gọi tới khi bắt được event_name

method          : function được gọi tới trong class         

   Sau đó viết đoạn code để chạy khi bắt được event           

images

Trong đó: 

                 $observer là các biến được truyền vào trong function Mage::dispatchEvent();

                           (variable_one, variable_two)

 

Tham khảo một số event default của Magento:

      http://rabee.me/2014/06/06/Magento-Events-Cheat-Sheet-1-9/

      https://magento2.atlassian.net/wiki/display/m1wiki/Magento+1.x+Events+Reference

 

2. Magento Overriding Class

Đôi khi ta cần phải thay đổi một chức năng nào đó của Magento core code. Tuy nhiên việc sửa đổi core file là một giải pháp không được khuyến khích bởi việc này có thể dẫn đến việc mất những thay đổi khi upgrade Magento lên phiên bản mới hơn. Sau đây là hai giải pháp cho việc thay đổi chức năng của Magento core code.

 

Giải pháp 1: Copy core file sang coodpool local theo đúng đường dẫn

Ví dụ: Khi cần sửa file app/code/core/Mage/Customer/Model/Customer.php, ta Copy file đến app/code/local/Mage/Customer/Model/Customer.php rồi thực hiện thay đổi. Lúc này Magento sẽ thực hiện code trong file tại codepool local thay vì core. 

 --> Ưu và nhược điểm của giải pháp này:

  • Ưu điểm: Nhanh và không bị mất các thay đổi khi upgrade Magento
  • Nhược điểm: Phải copy cả file trong khi chỉ cần thay đổi một function. Có thể không nhận được một số thay đổi cần thiết của code core khi upgrade Magento lên bản mới hơn.

 

Giải pháp 2: Viết Module để thực hiện Rewrite

 - Rewrite Blocks

   Khai báo rewrite trong file NameSpace/YourModule/etc/config.xml 

 images

   

  Sau đó tạo class như đã khai báo trong file config.xml

   app/code/local/NameSpace/YourModule/Block/Customer/Account/Forgotpassword.php

 images

 

- Rewrite Helpers

   Tương tự như block, ta cũng làm 2 bước:

   Khai báo rewrite 

images                  

  

  Và tạo class 

  app/code/local/NameSpace/YourModule/Helper/Customer/Data.php

 images

 

- Rewrite Models

   Khai báo rewrite (model và resource model)

 images              

                       

   Tạo class

    app/code/local/NameSpace/YourModule/Model/Customer.php

 images

 

 images 

 - Rewrite Controllers

    Rewrite controller hơi khác một chút so với các class trên.

    Khai báo trong file etc/config.xml:

frontend controller

images

                       

admin controller

images

 

 Khai báo class controller cần rewrite

Frontend controller

images

                   

Admin controller

images

                       

  --> Ưu và nhược điểm của giải pháp này:

  • Ưu điểm: Chỉ cần sửa một function cần rewrite, hạn chế tối đa vấn đề khi upgrade Magento lên phiên bản mới
  • Nhược điểm: Khai báo, config phức tạp

Thông tin kỹ thuật

Author Vu Manh Hung
(0)

Questions and Answers

add your question

There are no entries.