有时需要重写核心类以获得更多功能或使某些核心功能以其他方式工作。有什么办法可以覆盖核心类吗?如果有可能,那么我可以通过覆盖这些问题来面对哪些问题?
有时需要重写核心类以获得更多功能或使某些核心功能以其他方式工作。有什么办法可以覆盖核心类吗?如果有可能,那么我可以通过覆盖这些问题来面对哪些问题?
Answers:
我不久前创建了一个插件,该插件可让您覆盖核心类,但是它仍然成为@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的组件,并告诉Joomla也要在我的插件html文件夹中查找替代项,而不仅仅是在模板html文件夹中。
我从来不喜欢开发人员真正接受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);