2011-06-29 35 views
6

Mục tiêu của tôi là tắt mô-đun theo chương trình (ví dụ trong một số sự kiện quan sát). Người quan sát sớm nhất tôi tìm thấy là controller_front_init_before.Magento, làm thế nào để vô hiệu hóa mô-đun lập trình?

Vì vậy, mô-đun của tôi là nghe nó, và sau đó làm tiếp theo:

Mage::getConfig()->getModuleConfig('IG_LightBox')->active=(string)'false'; 

Nhưng module chọn vẫn còn hoạt động trên mỗi trang.

Ngoài ra tôi đã cố gắng tiếp cận này (giống nhau nhưng theo cách khác nhau):

Mage::getConfig()->getNode('modules/IG_LightBox')->active=(string)'false'; 

Ngoài ra tôi đã cố gắng để reinit cấu hình sau khi tất cả và để loadModules thêm một lần nữa, nhưng cả hai sẽ không giúp đỡ.

Mage::getConfig()->loadModules(); // won't help 
Mage::getConfig()->reinit(); // won't help 

Có thể tắt mô-đun theo chương trình không?

Cập nhật 1. Giải pháp này hoạt động hoàn hảo cho back-end. active = false thực sự vô hiệu hóa các mô-đun, nhưng tôi cần nó cho front-end quá. Vì vậy, tôi giữ cho tìm kiếm của tôi.

Cập nhật 2 Có 2 phương pháp trong ứng dụng/Mage.php, được gọi là init và initSpecified, cho phép chạy các Magento với số chọn chỉ mô-đun. Nhưng những phương thức này không được gọi trong luồng mặc định.

Cập nhật 3 Có sự kiện quan sát mà chúng tôi có thể sử dụng để kích hoạt hoặc hủy kích hoạt mô-đun thanh toán khi đang di chuyển. Nó được gọi là payment_method_is_active. Ví dụ về mã này làm cho phương thức thanh toán bằng séc chi phiếu không hoạt động:

public function payment_method_is_active(Varien_Event_Observer $observer) 
{ 
    if($observer->getMethodInstance()->getCode()=='checkmo') 
    { 
     $observer->getResult()->isAvailable=false; 
    } 
} 
+0

Tôi không thấy nơi bạn thực hiện "lưu" trên giá trị này vì tệp này được lưu trữ trong tệp mô-đun không có trong cơ sở dữ liệu, bạn phải thay đổi giá trị trong tệp cấu hình và sau đó lưu thời gian –

Trả lời

3
+0

Ông sử dụng cùng một cách tiếp cận, hoạt động = sai, các disabler mạnh mẽ nhất là không làm việc. Tính năng vô hiệu hóa đầu ra hoạt động, nhưng cách tiếp cận này không thể được sử dụng với tất cả các mô-đun. Dù sao, cảm ơn! –

+0

Bạn có thể chia sẻ nội dung hữu ích của liên kết tại đây không? Liên kết có xu hướng biến mất. –

4

Tôi nghĩ điều đó phụ thuộc vào loại mô-đun nào bạn muốn tắt. Bài viết của tôi đã làm việc cho loại mô-đun mà tôi muốn vô hiệu hóa, nhưng mô-đun đó được kiểm tra lại nếu nó được kích hoạt, trong khi hầu hết các mô-đun không làm điều đó.

Magento tải tất cả cấu hình mô-đun cùng một lúc. Không thể tạo một mô-đun sẽ lắng nghe quá trình này vì mô-đun sẽ không được tải trong khi quá trình diễn ra. Điều này tạo ra một nghịch lý. Không thể ngăn mô-đun tải bằng mô-đun khác.

Kết quả là lựa chọn duy nhất bạn là trái với là:

  1. Sửa lõi.
  2. Sử dụng các mô-đun được thiết kế tốt hơn và rõ ràng cho phép chúng bị vô hiệu hóa thông qua tùy chọn hoặc phương pháp cấu hình.
  3. Chỉnh sửa/mở rộng mô-đun bạn muốn tắt để bạn có thể tắt chức năng của nó trong thời gian chạy.

Hy vọng điều này sẽ giúp .. cho tôi biết nếu tôi có thể giúp bạn tìm cách tắt mô-đun mà bạn đang xử lý.

+0

Cảm ơn Gabriel, câu trả lời rất hữu ích. Mục tiêu của tôi là phát triển mô-đun, điều này sẽ cho phép vô hiệu hóa bất kỳ mô-đun nào và chỉ hiển thị chúng cho các IP của nhà phát triển. Tôi không muốn ghi đè lên cốt lõi lần này :) –

+1

Tôi hiểu. Cố gắng hoàn toàn vô hiệu hóa _any_ mô-đun bằng cách sử dụng một mô-đun khác không thể được thực hiện bởi vì tất cả các mô-đun được nạp cùng một lúc trước khi bất kỳ sự kiện nào được kích hoạt. –

Các vấn đề liên quan