Ghi đè các lớp MVC trong Joomla 3


7

Có cách nào để ghi đè các lớp MVC trong Joomla 3 không?

Tôi đã tìm thấy chủ đề này nhưng nó là dành cho Joomla 2.5. Làm thế nào để ghi đè các lớp lõi?

Tôi đã thực hiện ghi đè MVC trong Joomla 2.5 thành công nhưng bây giờ tôi đã chuyển sang Joomla 3. Nhưng plugin đó không được hỗ trợ cho Joomla 3.

Tôi đã tìm thấy bài viết này nhưng tôi không có ý tưởng tốt để viết một plugin. Khái niệm tương tự đã được sử dụng trong plugin mà tôi đã sử dụng trước đó trong Joomla 2.5.

http://docs.j Joomla.org/How_to_override_the_component_mvc_from_the_J Joomla!_core

Và tôi cũng có thể mở rộng các lớp đó và ghi đè lên các phương thức không?

Trên thực tế tôi muốn ghi đè mẫu email đăng ký, tác vụ đăng nhập của người dùng để kiểm tra loại người dùng và chế độ xem tiểu sử để lấy thêm dữ liệu từ các bảng của tôi.

Tôi đã thử plugin này- https://github.com/phproberto/j Joomla-mvc-override Nhưng nó có lỗi.

    Warning: fopen(D:\xampp\htdocs\my_project/libraries/legacy/module/helper.php): failed to open stream: No such file or directory in D:\xampp\htdocs\my_project\libraries\joomla\filesystem\file.php on line 327
?>

    Fatal error: Class 'JModuleHelperLibraryDefault' not found in D:\xampp\htdocs\my_project\plugins\system\mvcoverride\core\module\helper.php on line 13

Có ai phải đối mặt với kinh nghiệm loại này?

Cảm ơn

Câu trả lời:


3

Thật buồn cười, tôi vừa hoàn thành ngày hôm qua việc thực hiện plugin này trong một trang web.

Một webdev đồng nghiệp và tôi đã sửa đổi nó cho j Joomla 3.x và nó hoạt động.

Nó ở đây: https://github.com/ghazal/plg_mvcoverride

Nó đưa ra một lỗi mặc dù khi được kết hợp với một phần mở rộng nonumber.nl, Trình quản lý mô-đun nâng cao:

Call to undefined method JModuleHelper::addIncludePath()

Đang vội, giải pháp rất không hợp lý của tôi là nhận xét chức năng đầu tiên:

    public function onAfterInitialise()
    {

    $moduleHelperContent = JFile::read(JPATH_LIBRARIES.'/cms/module/helper.php');
    $moduleHelperContent = str_replace('JModuleHelper', 'JModuleHelperLibraryDefault', $moduleHelperContent);
    $moduleHelperContent = str_replace('<?php','',$moduleHelperContent);
    eval($moduleHelperContent);
    jimport('joomla.application.module.helper');
    JLoader::register('jmodulehelper', dirname(__FILE__).'/module/helper.php', true);

}

và sau đó, 2 dòng này:

JModuleHelper::addIncludePath(JPATH_BASE.'/code/modules');
JModuleHelper::addIncludePath(JPATH_THEMES.'/'.$template.'/code/modules');

do đó loại bỏ khả năng, trong trường hợp này, sử dụng nó để ghi đè helper.php trong một mô-đun.

Tôi định đăng lên đây để nhờ giúp đỡ nhưng bạn đã đánh bại tôi.


Wow .. Nó hoạt động tốt .. Cảm ơn bạn rất nhiều ghazal. Tôi đã sử dụng một plugin trước (Joomla 2.5) mà bạn đã đề cập trong tài liệu. Bạn có thể vui lòng cập nhật tài liệu? Nó cũng sẽ hữu ích cho những người khác. Và bạn cũng có thể thêm nó trong thư mục mở rộng j Joomla không?
cha

Thực hiện trong github như bạn yêu cầu. Đối với JED, sẽ mất nhiều thời gian hơn ...
ghazal

1
Cuối cùng, Alex (Chartier) đã tìm ra giải pháp khắc phục lỗi mà tôi nghĩ có liên quan đến Advanced Module Manager. Mã ban đầu đã thiếu một dòng từ hàm mà nó đã ghi đè trong jModuleHelper. Alex cũng sửa vấn đề đường dẫn $. Tất cả đã được sửa trong plugin github.
ghazal
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.