Логика работы компонента Joomla

Компонент Joomla это, самое сложное из всех расширений Joomla. Как правило, компонент создается, если нужно организовать на сайте нечто сложное и специфическое. В этой статье я скорее хочу сосредоточиться на том, как работает компонент, а не на том как его создать. Почему важно понимать, как работает компонент?

Потому что без этого создать его будет очень сложно, наверное даже невозможно. Итак, любой компонент в Joomla работает по принципу MVC: Модель - Вид - Контроллер. Модель работает с данными, будь то данные из БД, или файлы на диске, или настройки самого компонета. Вид отвечает собственно за внешний вид отображаемой на сайте информации. Контроллер - обеспечивает взаимодействие пользователя с данным компонентом на сайте и, в зависимости от действий пользователя, при необходимости обращается к модели или работает с видом. Главное достоинство такого алгоритма работы состоит в том, что модель (логика работы с данными) никак не зависит от представления данных на сайте, что позволяет изменять внешний вид и положение данных на странице без ущерба самой модели. Давайте разберемся как работает компонент.

Компонент как правило состоит из двух частей: frontend - страницы компонента на сайте и backend - настройки компонента в панели администрирования. Каждая из этих частей работает про принципу MVC. Посетитель попадает в компонент по ссылке вида http://site.ru/index.php?option=com_component&view=component. Здесь com_component - название папки компонента, view=component - вид по умолчанию. Обычно вид по умолчанию называется так же, как и сам компонент и именно туда попадает посетитель сайта кликнув по ссылке. За то, какой вид нужно выбрать ответственен контроллер и если, например, пользователь перешел по ссылке http://site.ru/index.php?option=com_component в которой вид не указан, то контроллер в данном случае выбирает вид по умолчанию. Все возможные виды находятся в папке views и обратиться к ним можно указав в ссылке соответствующий вид, например, если в папке views есть папка form, то обратиться к виду в ней можно так: http://site.ru/index.php?option=com_component&view=form.

В папке с видом как правило есть скрипт принимающий эстафету от контроллера. Чаще всего имя у него view.html.php. В данном случае приставка html указывает на тип данных, которые принимает этот вид. Соответственно в папке с видом может лежать например view.feed.php - вид для отображения RSS или еще какой-нибудь вид. Кроме того, скорее всего вы увидите также папку tmpl, в которой как правило лежит шаблон(или шаблоны) вывода. Таким образом важно понимать что файл вида view.html.php просто принимает данные и передает их в шаблон, в котором собственно и находятся все html теги. Задача шаблона вывода своится к тому чтобы вывести данные, полученные от вида в определенных местах на странице. Как правило шаблон вывода называется default.php. Часто в папке tmpl можно найти несколько шаблонов вывода данных. Это означает, что шаблон вывода default.php на каком-то этапе обращается к другим шаблонам вывода в этой папке. То есть все остальные шаблоны как бы включаются в главный шаблон вывода. Кроме того в папке как правило есть файл default.xml с настройками. Сами настройки можно изменить из панели администрирования joomla, в это случае шаблон вида будет соответствующим образом меняться. Например, можно отключить вывод заголовка страницы из админки и в виде заголовок исчезнет.

Я уже упоминал, что вид для того, чтобы отобразить данные запрашивает их у модели. Все подели находятся в папке com_component\models. В простейшем случае в этой папке всего один файл по названию компонента - models\component.php. В одном таком файле может быть одна или более функций для работы с данными. В более сложном случае файлов несколько и каждый из них скорее всего будет отвечать за работу со своим собственным видом в папке views. Модели можно использовать для получения данных из базы данных, для их обработки и проверки. После получения данных модель передает их виду для вывода если данные запросил вид. Если запрос пришел от контроллера, то данные передаются в контроллер, а из него в вид.

Что касается контроллеров, то они содержатся в файле controller.php в корне компонента т.е. com_component\controller.php. Таких файлов в компоненте всего два один для frontend, другой для backend. Ко всем контроллерам в файле controller.php кроме дефолтного можно обратиться так: http://site.ru/index.php?option=com_component&view=component&task=controllername.

Здесь task=controllername - это сообщение контроллеру, что данные в вид component нужно передать не через дефолтный контроллер display, а через котроллер controllername. В свою очередь из контроллера можно организовать редирект на другой вид.

Кроме всего вышеперечисленного в структуре компонета можно встретить также хелперы(helpers), таблицы(tables) и другие файлы и папки. Все они выполняют вспомогательные функции, которые не всегда можно возложить на модель, контроллер или вид. Вот так в общих чертах выглядит взаимодействие вида, контроллера и модели.

Также можно почитать:



Оставить комментарий: