Часть 01 - пакет установки
В цикле "Разработка 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