Новый фрэймворк Joomla1.5 дает огромные возможности разработчикам. Код joomla был полностью переписан заново, и имеет колосальные изменения.

Для начала создадим простой компонент Hello World. Далее компонент будет усложняться, чтобы показать возможности MVC проекта.

Хотя код и кажется по идее простым - простой вывод надписи Hello Wold, он будет усложняться по мере обрастания функционалом.

Вкратце напомню что такое MVC.
MVC - это структупа проекта, которая может использоваться, чтобы организовать код таким образом, чтобы логика и представление данных были отдельными.
Итак, рассмотрим три составляющие MVC (Model-View-Controller) компонента.

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

Вид

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

К
онтроллер
Контроллер - это обработчик действий пользователя. В нашем случае, действие пользователя - это запрос страницы. Контроллер в зависимости от запроса, будет вызывать модель, для управления данными, и управлять переходом Модели на Вид. Таким образом контроллер не отображает данные, а лишь вызывает модель, которая изменяет данные, а затем передает модель в вид, который отображается на экране.
В Joomla, MVC осуществляется с использованием трех классов: JModel, JView, JController.

Страртуем!

Создайте каталог com_hello, и в нем два каталога: admin и site. В одном будет храниться часть админки, в другом то, что видит пользователь.
Простейший компонент включает в себя только 5 файлов:
  • site/hello.php – это входная точка в компонент, похожая на index.php для сайтов.
  • site/controller.php – этот файл содержит базовый контроллер
  • site/views/hello/view.html.php – этот файл Вида. Он получает необходимые данные и передает их в шаблон.
  • site/views/hello/tmpl/default.php – сам шаблон.
  • hello.xml - это XML файл, который дает указания joomla как установить компонент. Этот файл должен находится в папке com_hello.

Создайте все эти файлы и папки, и в каждый каталог поместите пустые файлы index.html

С
оздаем входную точку.
Joomla всегда получает доступ, через единственную точку входа - файл index.php для фронт-енда, или administrator/index.php для бэк-енда. Далее Joomla будет загружать необходимый компонент, исходя из значения переменно option, переданной в url, или в POST-данных. Для нашего компонента, URL будет выглядить так:

index.php?option=com_hello&view=hello

Этот запрос будет загружать точку входа components/com_hello/hello.php.
Код этого файла обычно одинаков для большинства компонентов.

<?php
// проверяем доступ
defined( '_JEXEC' ) or die( 'Restricted access' );
 
// подключаем базовый контроллер
require_once( JPATH_COMPONENT.DS.'controller.php' );
 
// По необходимости подключаем дополнительный контроллер.
if($controller = JRequest::getWord('controller')) {
 
 $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
 if (file_exists($path)) {
 require_once $path;
 } else {
 $controller = '';
 }
}
 // Создаем контроллер
$classname    = 'HelloController'.$controller;
$controller   = new $classname( );
 
 // Выполняем задачу
$controller->execute( JRequest::getVar( 'task' ) );
 
// Пересылаем на контроллер
$controller->redirect();
?>

Рассмотрим описанное чуть подробнее:

JPATH_COMPONENT – это абсолютный путь к компоненту, в нашем случае это components/com_hello. Если вам нужно точно указать путь, то для административной части используйте JPATH_COMPONENT_ADMINISTRATOR, а для фронтенда JPATH_COMPONENT_SITE.

DS – это разделитель папок в вашей ОС: либо «/», либо «\». Он устанавливается автоматически, чтобы разработчику не приходилось создавать различные варианты.

После загрузки базового контроллера, мы проверяем, требуется ли нам какой-нибудь конкретный контроллер. В нашем компоненте, базовый контроллер является единственным, но мы написали проверку для будущего использования.

Метод JRequest:getVar() находит переменную в URL или в POST данных.
Например, наш URL может выглядеть так index.php?option=com_hello&controller=controller_name, тогда мы можем получить имя нужного нам контроллера, используя:

echo JRequest::getVar(“controller”); 

Сейчас мы используем наш базовый контроллер-класс HelloController в com_hello/controller.php, и, если необходимо, добавляем контроллер HelloControllerController1 из com_hello/controllers/controller1.php.
Обрати внимание! Используйте стандартную схему наименований, чтобы вам было легче в дальнейшем: {Componentname}{Controller}{Controllername}

После того как контроллер создан, мы задаем ему выполнить (execute) задачу, определенную в URL: index.php?option=com_hello&task=sometask. Если задача не задана, то по умолчанию выполняется задача display. Другие распространенные задачи: добавить, сохранить, удалить.

Контроллер может принять решение о переадресации страницы, обычно это бывает после задачи “сохранить”.
Главная точка входа (hello.php) в основном передает управление контроллеру, который уже выполняет задачу, переданную в запросе.

Создание контроллера

Наш компонент имеет только одну задачу – вывести надпись “привет мир”. Таким образом, контроллер будет очень простой. Манипуляций с данными не требуется. Все, что нужно сделать - это загрузить Вид. В нашем контроллере будет только один метод display(). Большая часть необходимых функций уже встроена в класс JController, так что все, что нам нужно сделать, это сослаться на метод JController::display() .

Код простейшего контроллера:

<?php
 defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.application.component.controller');
 
 class HelloController extends JController
{
/**
* метод вывода на экран
*
* @access    public
*/

 
function display()
{
parent::display();
}}
?>

Конструктор класса JController будет всегда создавать задачу по-умолчанию display() (можно задать другую, с помошью метода registerDefaultTask() )

Метод display() можно было не объявлять, и тут он показан только для примера.
Метод JController::display() будет определять название Вида, и шаблон, который нужно загрузить. Когда вы создаете пункт меню, ссылающийся на ваш компонент, менеджер меню позволит администратору выбрать Вид. А Вид, как правило, относится к определенным наборам данных (например, список автомобилей, список событий, один автомобиль, разовое событие).
В нашем компоненте только один вид hello, и один шаблон (default).

Создание вида

Задача очень проста: Извлекаем данные, которые будут отображаться, и передаем их в шаблон. Данные передаются в шаблон, с помошью метода JView::assignRef

Код Вида следующий:

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.view');
 
class HelloViewHello extends JView
{
 
function display($tpl = null)
 {
 $greeting = "Hello World!";
 $this->assignRef( 'greeting', $greeting );
 parent::display($tpl);
 }
}
?>  

Создание шаблона

Joomla шаблоны являются файлами PHP, которые создают вид данных. Переменные, переданные с помощью метода JView::assignRef можно получить из шаблона с помощью $this->propertyname.
В нашем простом шаблоне мы только выводим на экран приветствие.

<?php 
defined('_JEXEC') or die('Restricted access'); ?>
<h1><?php echo $this->greeting; ?></h1>  

Создание hello.xml

Можно установить компонент, путем копирования файлов с помошью FTP-клиента на сервер, и модификации базы данных.

Но лучше создать xml файл, и тогда Установщик Joomla все сделает за вас. XML файл может содержать разнообразную информацию и инструкции по установке:

  • Общую информацию о компоненте и авторе..
  • Список файлов, которые нужно скопировать из архива, с указанием куда копировать.
  • По-необходимости можно добавить скрипты сопровождающие установку и удаление компонента.
  • По-необходимости можно добавить файлы с sql-запросами, которые будут выполняться при установке и удалении компонента.

Наш XML файл выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component-install.dtd">
<install type="component" version="1.5.0">
 <name>Hello</name>
 <!—- Далее идут необязательные элементы-->
 <creationDate>23.02.2008</creationDate>
 <author>Kotofeich</author>
 <authorEmail></authorEmail>
 <authorUrl>http://www.example.org</authorUrl>
 <copyright>GNU/GPL</copyright>
 <license>Информация о лицензии</license>
 <!--  Номер версии сохраняется как строковое значение в таблице компонентов -->
 <version>Версия компонента</version>
 <!—- Описание необязательно, и по-умолчанию равно имени компонента -->
 <description>Описание компонента ...</description>
 
 <!—- Копирование файлов во фронтенд -->
<files folder="site">
 <filename>index.html</filename>
 <filename>hello.php</filename>
 <filename>controller.php</filename>
 <filename>views/index.html</filename>
 <filename>views/hello/index.html</filename>
 <filename>views/hello/view.html.php</filename>
 <filename>views/hello/tmpl/index.html</filename>
 <filename>views/hello/tmpl/default.php</filename>
 </files>
 
 <administration>
 <!—- меню в админке -->
 <menu>Hello World!</menu> 
 <!-- копирование файлов в админку -->
 <files folder="admin">
 <filename>index.html</filename>
 <filename>admin.hello.php</filename>
 </files> 
 </administration>
</install> 

Создайте также в каталоге admin файлы admin.hello.php, controller.php и index.html. Оставьте их пока пустыми.
У нас получился простейший компонент.


Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом

You have no rights to post comments