더 많은 기능을 사용하거나 일부 핵심 기능을 다른 방식으로 작동 시키려면 핵심 클래스를 대체해야하는 경우가 있습니다. 핵심 클래스를 재정의하는 방법이 있습니까? 가능하다면 어떤 문제를 재정 의하여 직면 할 수 있습니까?
더 많은 기능을 사용하거나 일부 핵심 기능을 다른 방식으로 작동 시키려면 핵심 클래스를 대체해야하는 경우가 있습니다. 핵심 클래스를 재정의하는 방법이 있습니까? 가능하다면 어떤 문제를 재정 의하여 직면 할 수 있습니까?
답변:
얼마 전에 핵심 클래스를 재정의 할 수있는 플러그인을 만들었지 만 @jackJoe가 그의 대답에서 지적한 문제에 여전히 노출되어 있습니다. 그러나 재정의를 깔끔하게 수행 할 수 있습니다.
components/com_content/models/articles.php
.
Joomla 3 사용자의 경우이를 확인하십시오. 도움이 될 것입니다.
플러그인-https: //github.com/ghazal/plg_mvcoverride
http://docs.joomla.org/How_to_override_the_component_mvc_from_the_Joomla!_core
나는 이것에 아주 오랫동안 있었고 Don이 내가 한 번 완료되면 그것에 대해 더 많은 세부 사항을 줄 것이라고 약속했다.
구성 요소에 대해 Joomla MVC를 재정의하고 템플릿 html 폴더뿐만 아니라 플러그인 html 폴더에서도 재정의를 찾도록 Joomla에 지시해야했습니다.
내가 좋아하지 않은 것은 개발자가 실제로 Joomla 기본 클래스를 가져 와서 엉망으로 만드는 것이므로 가능한 경우 제동하는 대신 해당 클래스를 확장합니다.
내 프로세스는 다음과 같습니다.
여기에 오히려 http://prntscr.com/3d9syq 이미지가 있습니다
아래 스 니펫의 첫 번째 부분은 사용자가 Joomla를 업데이트하려는 경우 업데이트가 완료 될 때 생성 된 임시 클래스 파일을 삭제하여 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);