В цикле "Разработка Model-View-Controller (MVC) компонента для Joomla! 2.5" мы разберем процесс разработки простого компонента Hello World!. Цикл в основном предназначен для начинающих разработчиков расширений для Joomla 2.5. Подразумевается, что вы уже знакомы с PHP (особенно с ООП составляющей) и фраза "статический метод" не вводит вас в ступор.

Английские термины и их перевод

Во избежания недопонимания в связи с использованием и переводом некоторых английских терминов, предлагаю вашему вниманию список соответствия этих терминов их переводу на русский и наоборот, с небольшими пояснениями. Термины в списке расположены в порядке их появления в цикле:

installation
установка
administrator / backend
администраторская часть или интерфейс администратора
public / frontend
публичная часть или просто сайт
точка входа
entry point
пакет
package
контроллер
controller
задача
task
перенаправление
redirect
модель
model
состояние модели
model state
представление
view
шаблон
layout. Обычно переводят как "файл разметки" (используется предствлением для отображения данных пользователю). Но мне больше нравится перевод "шаблон" и этот перевод более понятен в контексте его использования в этом цикле.
суб-шаблон
sub-layout. Можно перевести как подчиненный шаблон.
pagination
постраничная навигация
действия
actions
подменю
submenu. Также используется термин "дочернее меню".
хелпер
helper или класс-помощник
ACL (Access Control List)
список контроля доступа
ассеты
assets. В контексте ACL их можно назвать ресурсами.
разрешение
permission

Что касается комментариев к коду - я перевел их на русский (в отличие от имеющейся в сети документации), чтобы код был более понятен и прозрачен. Но некоторые листинги все же будут пояснены отдельно.

Вступление

Начиная с версии 1.6 Joomla была выделена в отдельное CMS-приложение, основой которого является Joomla Platform - фреймворк для создания веб-приложений. Joomla 2.5 базируется на Joomla Platform 11.4 - последней стабильной версии 2011 года. В цикле я буду ссылаться на API этой платформы, с которым вы можете ознакомиться на этой страничке.

Joomla 2.5 по сути состоит из трех основных приложений:

  • installation - используется для установки Joomla
  • administrator - используется для управления содержимым
  • public - используется для отображения содержимого

Приложение installation используется только один раз во время установки. Administrator и public используются в разрезе компонента. В Joomla каждый компонент имеет две точки входа:

  • одна расположена в директории components (используется для отображения содержимого)
  • вторая расположена в директории administrator/components (используется для управления содержимым)

Обе точки входа называются как componentname.php (имякомпонента.php).

После небольшого вступления предлагаем углубиться в создание нашего Hello World! компонента.

Обратите внимание на одну важную делать - все создаваемые файлы необходимо сохранять в кодировке UTF-8 without BOM, иначе могут возникнуть различные проблемы с отображением и обработкой этих файлов.

Сборка архивного файла установки

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

Для создания такого файла необходимо создать папку (вне директории установки Joomla) со следующим содержимым:

helloworld.xml
site/index.html
site/helloworld.php
admin/index.html
admin/helloworld.php
admin/sql/index.html
admin/sql/updates/index.html
admin/sql/updates/mysql/index.html
admin/sql/updates/mysql/0.0.1.sql Рассмотрим содержимое файлов.

helloworld.xml

<?xml version="1.0" encoding="utf-8"?>

<extension type="component" version="2.5.0" method="upgrade">
    <name>Hello World!</name>
    <!-- Следующие элементы необязательны -->
    <creationDate>Июль 2012</creationDate>
    <author>Вася Пупкин</author>
    <authorEmail>Ваш e-mail</authorEmail>
    <authorUrl>Ваш сайт</authorUrl>
    <copyright>Информация о копирайте</copyright>
    <license>Информация о лицензии</license>
    <!--  Версия записывается в таблицу компонентов -->
    <version>0.0.1</version>
    <!-- Описание необязательно -->
    <description>Описание компонента Hello World! ...</description>
 
    <!-- Запускается при обновлении -->
    <update>
        <schemas>
            <schemapath type="mysql">sql/updates/mysql</schemapath>
        </schemas>
    </update>
 
    <!-- Раздел основных файлов сайта -->
    <!-- Обратите внимание на значение аттрибута folder: Этот аттрибут описывает папку нашего пакета-установщика из которой должны копироваться файлы.
    Поэтому указанные в этом разделе файлы будут скопированы из папки /site/ нашего пакета-установщика в соответствующую папку установки. -->
    <files folder="site">
        <filename>index.html</filename>
        <filename>helloworld.php</filename>
    </files>
 
    <!-- Администрирование -->
        <administration>
            <!-- Раздел Меню -->
            <menu>Hello World!</menu>
            <!-- Раздел основных файлов администрирования  -->
            <!-- Обратите внимание на значение аттрибута folder: Этот аттрибут описывает папку нашего пакета-установщика из которой должны копироваться файлы.
            Поэтому указанные в этом разделе файлы будут скопированы из папки /admin/ нашего пакета-установщика в соответствующую папку установки. -->
            <files folder="admin">
                <filename>index.html</filename>
                <filename>helloworld.php</filename>
                <!-- Раздел SQL файлов -->
                <folder>sql</folder>
            </files>
    </administration>
 
</extension>


В принципе, по helloworld.xml особо нечего прокомментировать, так как все комментарии даны внутри файла. Единственное, стоит обратить внимание на тег <menu> - он указывает на то, какое имя компонента будет отображаться в меню "Компоненты" (в администраторской части) после его установки. Если мы не укажем имя, то Joomla сгенерирует его сама, за основу взяв имя компонента. Если мы укажем свое название меню (как в нашем примере), и это название не будет совпадать со строкой в языковом файле, то Joomla будет отображать алиас этого меню. Алиас - это по сути название, но без спец. символов и с тире вместо пробела. В нашем примере это будет "hello-world".

Точка входа сайта site/helloworld.php

Hello World! 

 

Точка входа администраторской части admin/helloworld.php

Hello World! administration 



 

index.html


<!DOCTYPE html><title></title>



 





Этот файл одинаковый для всех папок, и необходим с одной стороны для обеспечения безопасности (показывает пустую страницу, если кто-то пытается просмотреть содержимое директории на сервере используя абсолютный url), а с другой стороны для поддержки соглашения (convention) Joomla.

0.0.1.sql
Пустой файл, который будет использоваться для инициализации схемы версий нашего com_helloworld компонента.

Запакуйте созданную папку в архивный файл (zip, tar, tar.gz, bz2) или скачайте его напрямую с GitHub. Далее установите его, используя менеджер расширений Joomla. Теперь вы можете протестировать компонент.

Отображение с сайта

Для проверки наберите адрес index.php?option=com_helloworld в вашем браузере (не забудьте добавить к этому адресу путь установки вашей Joomla 2.5). Вы должны увидеть:

Hello World!

Управление в администраторской части

Для проверки наберите адрес administrator/index.php?option=com_helloworld в вашем браузере (не забудьте добавить к этому адресу путь установки вашей Joomla 2.5). Вы должны увидеть:

Hello World! administration

Также обратите внимание на то, что компонент Hello World! стал доступен в меню "Компоненты":

Меню Компоненты Основа нашего компонента была успешно создана. В следущей части мы добавим в наш компонент основные MVC составляющие: модель, представление и контроллер.

Код для этой части

Скачать com_helloworld часть 1

Актуальный код части 1 на GitHub