Урок 1. Файловая структура компонента Joomla

Приветствую вас мини-курсе, в котором мы рассмотрим создание несложного компонента для системы управления контентом Джумла. Конечно, в создаваемом компоненте мы реализуем минимальный функционал, если сравнивать со стандартными компонентами. На его примере вы увидите, как устроены компоненты, по какому принципу они работают, а также как добавлять, редактировать и отображать на экране необходимую информацию.



В данное время создано огромное количество разнообразных компонентов, которые решают самые различные задачи. Возникает вопрос: «Зачем создавать компонент, если можно найти уже готовый, который достаточно только установить в CMS Joomla?». Очень часто возникают ситуации, когда для решения определенной задачи не удается найти идеально подходящий компонент. Либо по причине его завышенной стоимости, либо по причине того, что в функционале компонента не всё подходит для решения поставленной задачи. Для данной ситуации есть решение: первое - купить подходящий компонент, несмотря на его высокую стоимость, второе – постараться адаптировать под собственные нужды готовый компонент, который близок по функционалу. Кстати, очень часто приходится адаптировать и платные расширения. И третий вариант решения – это создать собственный компонент, который в полной мере сможет решить поставленную задачу. Поэтому, если вам подходит третий вариант решения проблемы, и вы не знаете, как создаются компоненты для CMS Джумла, значит данный мини-курс для вас.

Первым делом хотел бы отметить что CMS Joomla написана с использованием шаблона проектирования MVC, то есть Model-View-Controller, что в переводе означает Модель-Вид-Контроллер. В классическом понимании шаблон проектирования MVC можно изобразить на схеме. Данный шаблон проектирования очень популярен и удобен в использовании, предусматривает полное отделение логики, (то есть программной части приложения), от его представления, (то есть дизайнерской части приложения), если сказать проще, от его шаблона, который отображает данные на экране. Данное разделение очень удобно, так как каждый элемент данного шаблона можно править в отдельности, при этом не боясь внести изменения в другие части. То есть, если нужно изменить дизайн (отображение данных), достаточно открыть шаблон и внести соответствующие правки, при этом не затрагивая логическую часть.

Если Джумла написана с использованием данного шаблона проектирования, значит и компонент, который мы будем создавать, мы также будем создавать по шаблону проектирования MVC (Модель. Вид. Контроллер.) Сейчас кратко я поясню, как работает данная схема. Эта схема работы будущего компонента, который мы будем создавать. Сейчас в первом уроке давайте определимся с логикой работы будущего компонента.

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

Если же задача, которую должен выполнить наш компонент - это задача по изменению данных, по добавлению данных, либо же по удалению определенных данных, то соответственно контроллер не передает управление виду, потому как не нужно ничего отображать на экране, а сразу же обращается к модели с запросом на изменение определенных данных. Соответственно модель выполняет данный запрос, осуществляет манипуляции с данными и возвращает контроллеру уже определённый результат. После этого обычно выполняется redirect со стандартной задача display. То есть выполнив определенные изменения, контроллер выполняет перенаправление обратно на главную точку входа и запрашивает выполнение стандартных задач на отображение данных на экран. Значит, если следующая задача, которую необходимо выполнить - это отображение данных на экран, значит контроллер передает управление виду и вид отображает данные посредством шаблонов.

Это очень кратко – схема работы будущего компонента и к данной схеме будем неоднократно возвращаться, когда будем создавать каждый элемент данной схемы и будем видеть наглядно работу данной логической схемы.

Переходим во временную папку на нашем компьютере и создаем каталог com_news в этом каталоге. Мы будем создавать на первом этапе наш компонент. Соответственно компонент называется news, а com - это приставка, которая указывает на тип расширения «компонент», то есть com. Далее следует нижнее подчеркивание - разделитель и имя компонента news соответственно.

Переходим в данный каталог и здесь определяем файловую структуру будущего компонента. Компоненты для CMS Джумла обычно состоят из трех частей. Первая часть - это установочная часть, которая выполняется во время установки. В нашем случае данная часть будет представлена файлом install.xml. Файл install.xml - это файл-манифест, который содержит инструкции по установке будущего компонента. Его код мы с вами еще будем описывать.

Далее каталог admin - это администраторская часть нашего компонента. То есть его панель управления, которая необходима для управления будущим компонентом. Данная часть доступна в панели администратора Joomla.

Последняя часть будущего компонента, которая представлена каталогом site. Это пользовательская часть, которая доступна для всеобщего посещения. Данная часть обычно используется для отображения данных компонента непосредственно в пользовательской части сайта на CMS Джумла. То есть на сайте, который мы с вами разрабатываем.

Так мы определили файловую структуру будущего компонента, а значит сейчас необходимо для каждого каталога также определить вложенную файловую структуру.

Переходим в каталог admin и начинаем создавать каталоги. Первый каталог views. Каталог views необходим для хранения элемента вид шаблона проектирования MVC. То есть в каталоге views мы будем хранить в виды панели администратора компонента com_news.

Следующий каталог который мы создаём это models. В данном каталоге мы будем хранить модели будущего компонента. Так мы уже реализовали два элемента логической схемы. Следующий каталог controllers в данном каталоге. Тут мы будем хранить контроллеры, а именно sub контроллеры (дочерние контроллеры) от главного контроллера компонента. Помните, когда я говорил, что если задача, которую определяет пользователь, сводится к манипуляции с данными, то контроллер обращается в модели. Но главный контроллер компонента обычно напрямую к модели не обращается, он обращается к модели, используя дочерние контроллеры (sub-контроллер). То есть на данном этапе вступает в работу некий дочерней контроллер, который получил управление от главного контроллера, и должен выполнить поставленную задачу. А выполняет он данную задачу посредством модели. То есть данный дочерний контроллер обратится к модели и укажет, что необходимо удалить ту или иную запись из базы данных. Sub-контроллеры будут располагаться в папке controllers.

Следующий каталог - это каталог и sql. В этом каталоге мы будем хранить файлы в которых будут описаны SQL-запросы, выполняемые во время установки компонента и во время удаления компонента.

Далее табличный каталог tables. В этом каталоге мы будем хранить файлы, в которых будут описаны классы таблиц. Классы таблицы необходимы для непосредственной работы с базой данных. По шаблону проектирования с базой данных обычно работает модель, но модель в принципе может работать с базой данных мы это с вами будем видеть наглядно. Мы непосредственно будем работать с таблицами базы данных из моделей. Но также модель в стандартном функционале Joomla работает c базой данных не напрямую, а через специальный класс-посредник. Класс таблицы, который непосредственно работает с таблицами базы данных. То есть модель формирует некие условия, формируют некие данные дальше, обращается к классу таблиц, и затем уже класс таблиц манипулирует данными в базе данных. То есть в каталоге tables будут храниться непосредственно классы таблиц, которые будут работать с базой данных.

С каталогами мы с вами закончили, теперь создаем необходимые файлы. Первый файл называется news.php – его имя совпадает с именем компонента. Это не что иное, как точка входа в данный компонент. Это главная точка входа. Отправляя запрос на сервер, пользователь попадает сразу же в данную точку входа, если конечно же задачу должен выполнить компонент, который мы с вами разрабатываем.

Следующий файл который мы сами создаем это файл контроллера. Это главный контроллер нашего компонента. Запрос на выполнение определенной задачи сразу же попадает в данный контроллер и он определяет, какой элемент далее будет выполнять поставленную задачу.

С файловой структурой администраторской панели мы с вами закончили переходим в каталог site. И здесь определяем файловую структуру пользовательской части компонента. Пользовательская часть - это такая же часть, как и панель администратора, а значит мы создаем каталог views для хранения видов. Дальше создаем каталог models для хранения моделей. И создадим каталог language, который я забыл создать в панели администратора. Данный каталог необходим для хранения локализации будущего компонента. Сразу копируем данный каталог и добавляем в панель администратора. То есть для каждой части компонента мы создаем собственную локализацию: как для панели администратора, так и для пользовательской части. По поводу локализации мы с вами еще будем говорить отдельно. Пока что создаем контейнер для хранения файлов локализации.

Здесь нам также потребуется модель, вид и в пользовательской части папка контроллер не нужна потому, как я сказал, что в папочке controllers для панели администратора будут храниться дочерние sub-контроллеры. Они вступают в работу, когда мы манипулируем данными. А манипуляции с данными обычно осуществляются в компонентах в панели администратора, но в пользовательской части мы будем только отображать определенные данные на экран, а значит никакой манипуляции с данными здесь не будет, и соответственно папку controllers мы не создаем.

Далее создаем главную точку входа для пользовательской части. То есть news.php - это главная точка входа пользовательской части. И конечно же создаем главный контроллер пользовательской части controller.php.

На этом файловая структура будущего компонента новостей завершена. Соответственно на этом данный урок мы с вами закончим и в следующем уроке мы займемся написанием кода файла install.xml - это файл-манифест. В нем мы опишем инструкции по установке будущего компонента в CMS Joomla, а сейчас давайте прощаться. Всего доброго и увидимся в следующем уроке нашего мини-курса!


Для лучшего понимания того, из чего состоит файловая структура компонента CMS Joomla, смотрите видео-урок канала WebForMySelf на YouTube:

Продолжение → «Урок 2. Установка компонентов Joomla»
Ссылка на оглавление со списком всех уроков мини-курса WebForMySelf «Создание компонента для Joomla 3 за два вечера»

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню