Куда идем?

Эта статья, прежде всего, будет интересна профессионалам 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-файлов. Может случиться так, что с очередным обновлением разработчики внесут какие-то изменения не только в переопределенные файлы, но и в другие, которые связаны с переопределенными. Это может привести к ошибкам.

Об авторе
Wedal
(Виталий). Веб-разработчик полного цикла (Full Stack). Создатель и автор сайта Wedal.ru.
Основной профиль – создание сайтов и расширений на CMS Joomla.
Добавить комментарий

Комментарии  
4
Вот это да, просто нет слов!
Давно работаю с Joomla и периодически приходится хакать сторонние компоненты, чтобы доработать их под нужды заказчика. Теперь эта работа станет значительно проще.
Спасибо, Виталий, твой сайт один из лучших по Joomla!
1
Интересно,... но терзают меня смутные сомнения или это хорошая практика :)
В любом случае отличный материал. +
0
ругается на эти строчки:

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
MartyBong, это не ошибки, но предупреждения о том, что переменная $path не определена. Вы можете их просто игнорировать, отключив отображение предупреждений на сайте, а можете добавить дополнительную проверку в код на существование переменной.
0
Что-то не переопределяет модели..
Все сделано по статье..
0
chip, разработчик данного плагина временно приостановил его развития из-за высокой загруженности. Вот здесь можно скачать последнюю версию: https://github.com/ghazal/plg_mvcoverride/archive/master.zip
0
Расскажите про пагинцаию в модуле например (mod_artices_news) цены Вам не будет!!!!:))
0
Roman, пагинация в модуле - нонсенс. Пагинация используется в компонентах, чтобы разбить контент на несколько страниц. Если вы ходите осуществить подобное в модуле, вам придется загружать весь список материалов и имитировать разбиение на страницы с помощью JavaScript, что, на мой взгляд, плохая и странная затея. Лучше разберитесь в базовых принципах работы Joomla, чтобы решить вашу задачу корректным способом, либо опишите ее, и я дам совет.
0
Подскажите, а есть актуальная информация по переопределению компонентов MVC в 2021?
0
Принципиально ничего и не изменилось. Единственное, что я бы посоветовал сегодня - если вы видите, что вам требуется много изменений в каком-то view компонента, затрагивающих файлы ядра, с ним связанные (например его контроллер и view.html.php), то проще создать свой альтернативный View. Joomla позволяет это делать.

Просто берете папку с view из компонента и копируете ее. Далее переименовываете на свое название папку и данные в файлах, которые в ней находятся (классы, названия в файле xml). Далее, копируете файл контроллера и также переименовываете его и класс в нем. Вот и всё - у вас готов ваш личный view, в котором вы можете творить всё, что душе угодно, не опасаясь хаков. В админке появится выбор пункта меню соответствующего типа. Плюс к вашему собственному view вы можете создать свою модель. Это тоже будет работать. Joomla прекрасно расширяется, в этом ее прелесть.
0
Добрый день.
Наверное неправильный вопрос, но все же:
"Плагин переопределений MVC для Joomla 4.1" Вы еще не создавали..?
0
Анатолий, вопрос не то что бы неправильный, но все же. Если он у вас возникает, то скорее всего вам нужен либо отдельный плагин, либо отдельное расширение. Здесь все зависит от конкретики. Опишите вашу задачу, я попробую подсказать лучший выход.