Đôi khi cần phải ghi đè các lớp lõi để có thêm chức năng hoặc để làm cho một số chức năng cốt lõi hoạt động theo cách khác. Có cách nào để ghi đè các lớp lõi? Nếu có thể thì vấn đề gì tôi có thể gặp phải bằng cách ghi đè chúng?
Đôi khi cần phải ghi đè các lớp lõi để có thêm chức năng hoặc để làm cho một số chức năng cốt lõi hoạt động theo cách khác. Có cách nào để ghi đè các lớp lõi? Nếu có thể thì vấn đề gì tôi có thể gặp phải bằng cách ghi đè chúng?
Câu trả lời:
Vâng, nó là có thể.
Bạn có thể sử dụng một plugin hệ để ghi đè lên các lớp học, vui lòng đọc này liên kết và này và này
Hai vấn đề mà bạn sẽ phải đối mặt:
bạn cần ghi đè cả lớp (không chỉ các phần của nó)
nếu lõi được cập nhật và lớp cũng được cập nhật / thay đổi, bạn cần cập nhật ghi đè của mình (nếu cần).
Tôi đã tạo một plugin cách đây một thời gian cho phép bạn ghi đè các lớp cốt lõi, nhưng nó vẫn trở thành con mồi cho các vấn đề mà @jackJoe đã chỉ ra trong câu trả lời của anh ấy. Tuy nhiên, nó cho phép bạn thực hiện ghi đè một cách sạch sẽ.
components/com_content/models/articles.php
.
Đối với người dùng Joomla 3 - hãy kiểm tra những điều này. Nó sẽ giúp bạn.
Ghi đè các lớp MVC trong Joomla 3
Plugin - https://github.com/ghazal/plg_mvcoverride
http://docs.j Joomla.org/How_to_override_the_component_mvc_from_the_J Joomla!_core
Tôi đã ở trên cái này trong một thời gian rất dài và hứa với Don rằng một khi tôi đã hoàn thành sẽ cung cấp thêm chi tiết về nó.
Tôi cần ghi đè Joomla MVC cho các thành phần và bảo Joomla tìm kiếm ghi đè trong thư mục html plugin của tôi, không chỉ trong thư mục html mẫu.
Điều tôi không bao giờ thích là khi các nhà phát triển thực sự lấy lớp mặc định của Joomla và gây rối với nó, vì vậy tôi thà mở rộng lớp đó nếu có thể, thay vì phanh một cái gì đó.
Quá trình của tôi không theo sau.
đây là hình ảnh chứ không phải http://prntscr.com/3d9syq
Các phần đầu tiên trong đoạn trích dưới đây là kiểm tra xem người dùng đang ở đâu, nếu anh ta chuẩn bị cập nhật Joomla Tôi đang xóa các tệp lớp tạm thời được tạo để đảm bảo rằng chúng tôi nhận được các tệp mới khi cập nhật hoàn tất, không quan tâm đến số JackJoe 2.
if (($this->Input('option') == 'com_joomlaupdate' && $this->Input('task') == 'update.install') || ($this->Input('option') == 'com_joomlaupdate' && $this->Input('layout') == 'complete')) {
JFolder::delete(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
JFolder::create(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
$indexContent = '';
JFile::write(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/index.html', $indexContent);
}
$YjsgJViewDefaultRead = JPATH_LIBRARIES . '/legacy/view/legacy.php';
$YjsgJViewDefaultFile = YJSGEXTEND . "classes" . YJDS . "Yjsg" . $isView . "Default" . $IsJversion . ".php";
//extend JView library class
if (!JFile::exists($YjsgJViewDefaultFile)) {
$YjsgJViewDefault = JFile::read($YjsgJViewDefaultRead);
$YjsgJViewDefault = str_replace('class ' . $isView, 'class Yjsg' . $isView . 'Default', $YjsgJViewDefault);
JFile::write($YjsgJViewDefaultFile, $YjsgJViewDefault);
}
require_once($YjsgJViewDefaultFile);
jimport('joomla.application.component.view');
JLoader::register($isView, YJSGEXTEND . $IsJversion . '/component/view.php', true);