02 - Создание установщика xml, точки входа и контроллера для части сайта joomla 3.x
mycomponents.xml является основным файлом для установки компонента, модуля, плагина. Называться он может как угодно, главное потом не забывать прописывать имя в других файлах. Когда вы устанавливаете компонент joomla ищет xml файл считывает его и устанавливает все файлы в указанные директории. Если оставить этот файл пустой то joomla выдаст ошибку что не удалось найти xml файл. Ниже приведён код xml файла он прокомментирован так что разобраться будет просто, он не сильно отличается от joomla 1.5 структура похожа, есть незначительные изменения. Вы даже можете на joomla 1.6 установить компонент от 1.5 и он установится, но не будет работать как надо, тоже самое и для версии joomla 3.x.
Открываем файл mycomponent.xml
<?xml version="1.0" encoding="utf-8"?><!-- версия xml и кодировка в которой устанавливаем--> <!--Для какой версии joomla устанавливаем--> <extension type="component" version="3.0" method="upgrade"> <!-- Название компонента --> <name>Mycomponents</name> <!-- Элементы ниже необязательны и их значения могут быть введены в произвольном формате --> <creationDate>2012.11.05</creationDate> <!-- Дата создания --> <author>Ваня</author> <!-- Автор --> <authorEmail>pupkin@mail.ru</authorEmail> <!-- Почта --> <authorUrl>http://joomla-umnik.ru</authorUrl> <!-- Сайт разработчика --> <copyright>Copyright (C) 2011 mycomponent</copyright> <!-- Копирайт --> <license>http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL</license> <!-- Лицензия --> <!-- Строка версии записывается в таблицу компонентов --> <version>1.2</version> <!-- Поле description необязательно и по умолчанию равно значению поля name --> <description> Компонент для joomla. Мануал как создать компонент на joomla 3.х </description> <!-- Установка таблиц компонента --> <install> <sql> <file driver="mysql" charset="utf8">sql/install.sql</file> </sql> </install> <!-- Файлы сайта --> <files folder="site"> <filename>index.html</filename> <filename>mycomponents.php</filename> <filename>controller.php</filename> <folder>views</folder> <folder>models</folder> <folder>css</folder> </files> <!-- Языковой файл сайта --> <languages folder="site"> <language tag="ru-RU">language/ru-RU/ru-RU.com_mycomponents.ini</language> <language tag="ru-RU">language/ru-RU/ru-RU.com_mycomponents.sys.ini</language> </languages> <!-- Медиа файл логотип --> <media destination="com_mycomponent" folder="media"> <filename>index.html</filename> <folder>images</folder> </media> <!-- Файлы административной части --> <administration> <menu>COM_MYCOMPONENT_RAZDEL</menu> <files folder="admin"> <filename>index.html</filename> <filename>mycomponents.php</filename> <filename>controller.php</filename> <!-- У нас в административной части есть папка sql что бы установить всё её содержимое мы заключаем её в тег <folder>sql</folder> так же устанавливаются и другие любые папки скажем images css это применяется как и для части сайта так и для админки--> <folder>sql</folder> <folder>tables</folder> <folder>models</folder> <folder>views</folder> <folder>controllers</folder> <folder>helpers</folder> </files> <!-- Языковой файл админки --> <languages folder="admin"> <language tag="ru-RU">language/ru-RU/ru-RU.com_mycomponents.ini</language> <language tag="ru-RU">language/ru-RU/ru-RU.com_mycomponents.sys.ini</language> </languages> </administration> <!-- extension теперь он используется вместо instal --> </extension>
Строка <menu>COM_MYCOMPONENT_RAZDEL</menu> берётся из языкового файла из части сайта ru-RU.com_mycomponents.sys.ini Указываете свои данные, пишите название компонента <name>Mycomponents</name> если пишете свой то ставьте название как и ваша точка входа иначе могут возникнуть проблемы. И так далее заполняете свои данные, заметьте что теперь не нужно указывать все подряд файлы которые нужно установить, теперь достаточно указать имя папки <folder>helpers</folder>. Вся эта структура схожа с joomla 2.5 отличается только <extension type="component" version="3.0" method="upgrade"> для какой версии устанавливать!
Если вы уже создавали компоненты для 2.5 то сделать их под 3.x или перебить будет довольно просто.
Теперь приступим к точке входа для части сайта mycomponents.php этот файл вызывает контроллер, который в свою очередь тянет модель, а из модели данные передаются в вид, а из вида в шаблон. Как правило точка входа везде одинакова. Через точку входа мы подключаем контроллер, который обращается к модели и говорит что сделать, модель исполняет запрос, и передаёт в вид, в результате чего мы видим наш компонент. Адрес в наш компонент выглядит так index.php?option=com_mycomponents эта ссылка запустит выполнение файла, являющегося точкой входа в наш компонент. В версии 3.x изменения есть и если раньше в версии 2.5 работала структура от 1.5 то теперь такое не прокатит, нужно писать по стандартам для 3.x
Откройте файл части сайта mycomponents.php
<!-- Price leaf компонент онлайн калькулятор. Официальный сайт http://joomla-umnik.ru --> <?php /*Это точка входа в сам компонент */ //Защита от прямого обращения к скрипту defined('_JEXEC') or die; //Создание класса компонента $controller = JControllerLegacy::getInstance('Mycomponents'); //Выполнить задачу запроса $controller->execute(JRequest::getCmd('task')); //Переадресация $controller->redirect();
Теперь создадим контроллер. Что он делает, он вызывает класс class MycomponentsController extends JControllerLegacy который делает одну важную для нас вещь отображает данные. Большая часть необходимых функций уже встроена в класс JController, так что все, что нам нужно сделать, это вызвать метод JController::display(). Конструктор JController будет всегда регистрировать display() задачу так как у нас она одна и не определена (используется registerDefaultTask() метод), устанавливается default task метод (задача по умолчанию).
display () - это первый по приоритету метод, он вызывает родительский конструктор. JController :: display () метод определит название layout и layout запроса и загрузки, которые определяют и устанавливают выбор ветки в дереве задач. Когда Вы создаете пункт меню для вашего компонента, менеджер меню позволит администратору выбирать задачу с которой начинать выполнение компонента.
Изменений от 2.5 мало разве что поменялось расширение extends JControllerLegacy
Откройте файл части сайта controller.php
<?php //Запрет к прямому обращению defined('_JEXEC') or die; class MycomponentsController extends JControllerLegacy { function display () { parent::display(); } } ?>
Возможно пока что вам сложно понять структуру и взаимодействие, но чуть дальше вы поймёте всю взаимосвязь, точка входа и контроллер почти во всех компонентах одинаковы, так что сильно углубляться в эти файлы не стоит. А пока что займёмся установкой таблиц в бд.