Как переопределить основные классы?

Иногда возникает необходимость переопределить основные классы, чтобы получить больше функциональности или заставить некоторые основные функции работать по-другому. Есть ли способ переопределить основные классы? Если возможно, какие проблемы я могу решить, переопределив их?

20 голосов | спросил Dmitry Rekun 23 PMpWed, 23 Apr 2014 18:56:20 +040056Wednesday 2014, 18:56:20

4 ответа


16

Да, это возможно.

Вы можете использовать системный плагин для переопределения классов, пожалуйста, прочитайте эту ссылку и this и this

Две проблемы, с которыми вы столкнетесь:

  1. вам нужно переопределить весь класс (а не только его части)

  2. , если ядро ​​обновлено и класс также обновлен /изменен, вам необходимо обновить переопределение (если необходимо).

ответил jackJoe 23 PMpWed, 23 Apr 2014 19:27:25 +040027Wednesday 2014, 19:27:25
10

Я создал плагин некоторое время назад, что позволяет вам переопределять основные классы, но он по-прежнему становится жертвой проблем, о которых @jackJoe указал в своем ответе. Тем не менее, это позволяет вам делать переопределения чисто.

https://gist.github.com/dongilbert/3237387

ответил Don Gilbert 23 PMpWed, 23 Apr 2014 19:51:51 +040051Wednesday 2014, 19:51:51
4

Я был на этом очень долго и обещал Дону, что, как только я закончу, вы получите более подробную информацию об этом.

Мне нужно было переопределить Joomla MVC для компонентов и сообщить Joomla о том, чтобы искать переопределения в моей папке html для плагинов, а не только внутри папки шаблона html.

Мне никогда не нравилось, когда разработчики фактически принимают класс по умолчанию Joomla и беспорядок с ним, поэтому я предпочитаю расширить этот класс, если смогу, вместо того, чтобы что-то тормозить.

Мой процесс делает следующее.

  1. Получить класс, который необходимо переопределить
  2. Прочитайте, замените имя класса, создайте новый файл в папке temp class
  3. Загрузите мою версию класса
  4. Загрузить класс Joomla
  5. Зарегистрируйте мой метод расширения, который расширяет функцию loadTemplate для поиска переопределения в моем плагине, чем шаблон joomla и последний компонент joomla

вот изображение http://prntscr.com/3d9syq

Первые части нижеприведенного фрагмента проверяют, где находится пользователь, если он собирается обновить Joomla. Я удаляю файлы temp-класса, которые были созданы, чтобы убедиться, что мы получим свежие, когда обновление завершено, чем будет выполнено от 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);
ответил Stefan 25 PMpFri, 25 Apr 2014 16:54:33 +040054Friday 2014, 16:54:33
4
ответил cha 28 52014vEurope/Moscow11bEurope/MoscowFri, 28 Nov 2014 14:14:12 +0300 2014, 14:14:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132