В этой статье я расскажу о том, как можно переопределить модели, контроллеры, представления компонентов без хаков ядра.
Переопределение MVC-компонентов Joomla.

Эта статья, прежде всего, будет интересна профессионалам Joomla, тем, кто знает, что такое Joomla Overrides, знаком с парадигмой MVC и владеет PHP. В этой статье я расскажу о том, как можно переопределить в шаблон не только макеты фронтенда Joomla, но и модели, контроллеры, представления компонентов без хаков ядра. Да, именно так, вы не ослышались.

Идея очень близка к стандартным переопределениям макетов Joomla. Делаем плагин, который перед загрузкой компонента проверяет в шаблоне соответствующую папку в поисках переопределений не только макетов, но и других файлов MVC. Если таковые находятся, то используем их вместо стандартных, которые есть в компоненте.

Вот плагины:

Плагин переопределений MVC для Joomla 2.5

Плагин переопределений MVC для Joomla 3.2

После установки плагин нужно активировать в менеджере плагинов.

Как это работает?

В папке с шаблоном создаем подпапку code, в ней подпапку с именем компонента и далее, как описано ниже.

Переопределение контроллера компонента:

TEMPLATE_NAME/code/COMPONENT_NAME/CONTROLLER.php
TEMPLATE_NAME/code/administrator/COMPONENT_NAME/CONTROLLER.php

Переопределение модели компонента:

TEMPLATE_NAME/code/COMPONENT_NAME/models/MODEL_NAME.php
TEMPLATE_NAME/code/administrator/COMPONENT_NAME/models/MODEL_NAME.php

Переопределение представления компонента:

TEMPLATE_NAME/code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php
TEMPLATE_NAME/code/administrator/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php

Переопределение модуля:

TEMPLATE_NAME/code/MOD_NAME/MOD_NAME.php

Расширение стандартных классов.

Если в настройках плагина вы активируете опцию Make Extendable, то будете иметь возможность расширять классы. Это лучший подход, чем просто переопределение.

Пример расширения класса можно посмотреть в статье VirtueMart – интернет-магазин на Joomla. Часть 29. Расширение функциональных возможностей Virtuemart без хака ядра.

Более подробную документацию по работе этого плагина можно посмотреть в этом руководстве(англ.).

И все это будет работать! Но не стоит злоупотреблять переопределением MVC-файлов. Может случиться так, что с очередным обновлением разработчики внесут какие-то изменения не только в переопределенные файлы, но и в другие, которые связаны с переопределенными. Это может привести к ошибкам.

Понравилась статья? Сохраните себе на стену:

Ваша оценка материала очень важна для нас. Просим вас оценить статью или оставить отзыв в комментариях ниже.

4.3333333333333 1 1 1 1 1 4.33

Комментарии  

0 # Пагинация в модулеRoman87rus 16.04.2016 14:42
Расскажите про пагинцаию в модуле например (mod_artices_news) цены Вам не будет!!!!:))
Ответить | Ответить с цитатой | Цитировать
0 # RE: Пагинация в модулеWedal 18.04.2016 04:00
Roman, пагинация в модуле - нонсенс. Пагинация используется в компонентах, чтобы разбить контент на несколько страниц. Если вы ходите осуществить подобное в модуле, вам придется загружать весь список материалов и имитировать разбиение на страницы с помощью JavaScript, что, на мой взгляд, плохая и странная затея. Лучше разберитесь в базовых принципах работы Joomla, чтобы решить вашу задачу корректным способом, либо опишите ее, и я дам совет.
Ответить | Ответить с цитатой | Цитировать
0 # Переопределениеchip 22.01.2016 13:13
Что-то не переопределяет модели..
Все сделано по статье..
Ответить | Ответить с цитатой | Цитировать
0 # RE: ПереопределениеWedal 01.02.2016 06:10
chip, разработчик данного плагина временно приостановил его развития из-за высокой загруженности. Вот здесь можно скачать последнюю версию: https://github.com/ghazal/plg_mvcoverride/archive/master.zip
Ответить | Ответить с цитатой | Цитировать
0 # Вылезли 2 ошибкиMartyBong 02.09.2015 07:53
ругается на эти строчки:

Notice: Undefined variable: path in /home/sitename/public_html/plugins/system/mvcoverride/module/helper.php on line 65

Notice: Undefined variable: path in /home/sitename/public_html/plugins/system/mvcoverride/module/helper.php on line 67

не подскажите, как исправить?
Ответить | Ответить с цитатой | Цитировать
0 # RE: Вылезли 2 ошибкиWedal 03.09.2015 03:51
MartyBong, это не ошибки, но предупреждения о том, что переменная $path не определена. Вы можете их просто игнорировать, отключив отображение предупреждений на сайте, а можете добавить дополнительную проверку в код на существование переменной.
Ответить | Ответить с цитатой | Цитировать
+4 # Супер!!!deeprus 25.11.2013 10:58
Вот это да, просто нет слов!
Давно работаю с Joomla и периодически приходится хакать сторонние компоненты, чтобы доработать их под нужды заказчика. Теперь эта работа станет значительно проще.
Спасибо, Виталий, твой сайт один из лучших по Joomla!
Ответить | Ответить с цитатой | Цитировать
+1 # xm....Dmitry б 25.11.2013 16:54
Интересно,... но терзают меня смутные сомнения или это хорошая практика :)
В любом случае отличный материал. +
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий

Для отправки комментария введите код с картинки:
Защитный код
Обновить

Вверх