Смекни!
smekni.com

Основы разработки компонентов для Joomla CMS 1.5 (стр. 7 из 9)

В Joomla 1.5 разработчиками реализован собственный API, работающий по принципу Model-View-Controller.

Model-View-Controller (в дальнейшем - MVC) является схемой-паттерном для создания гибких и легко расширяемых приложений с пользовательским интерфейсом. Эта схема была разработана создателями Smalltalk-80 ещё в 1980 г.

В компоненте, построенном с помощью технологии MVC, используются три основные части:

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

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

Контроллер (Controller) - отвечает за действия пользователя. По сути, действие пользователя - это запрос страницы. Контроллер в зависимости от запроса, вызывает модель, для управления данными, и управляет переходом Модели на Вид. Таким образом, контроллер не отображает данные, а лишь вызывает модель, которая изменяет данные, а затем передает модель в вид, который отображается на экране. Схема принципа работы технологии MVC представлена на рисунке 1.6.

Рис. 1.6 – Принцип работы технологии Model-View-Controller

Такое разделение удобно для групповой работы над проектом, дисциплинирует и дает отличное качество получаемого кода.

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

В Joomla 1.5, технология MVC использует три класса: JModel , JView и JController .

Глава II. Разработка компонента для Joomla 1.5

В этой главе будут рассмотрены основные принципы проектирования и реализации компонентов для JoomlaCMSверсии 1.5 на примере разработки простого компонента “Hello”, использующего основные методы и функции внутреннего интерфейса программирования системы.

2.1. Общая структура компонента

Каждый компонент Joomla, реализованный по технологии MVC, имеет структуру расположения файлов, представленную на рисунке 2.1.

Рис. 2.1 – Начальная структура компонента Joomla 1.5

Директория «admin» содержит файлы по настройке и управлению компонента из административной панели JoomlaCMS.

Директория «site» содержит файлы для лицевой части компонента, видимой посетителями сайта. Рассмотрим наиболее важные файлы этой директории:

· /site/{componentname}.php

Точка входа (или точка отправления) для лицевой части компонента. Является обязательным исполнительным файлом.

· /site/controller.php

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

· /site/views/{viewname}/view.html.php

Обработчик полученных данных. После обработки передает данные для вывода на сайте.

· /site/views/{viewname}/tmpl

Шаблон вывода полученных данных от обработчика.

· /site/models

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

· /site/controllers

Директория содержит расширяющие контроллеры для основного, либо набор необходимых компоненту контроллеров.

Файловая структура директории «admin» в точности повторяет структуру лицевой части компонента, описанной выше. Необходимо учитывать, что директории «site» и «admin» не пересекаются в процессе работы компоненты. По большому счету, эти две директории можно рассматривать как два различных подкомпонента одного большого компонента.

Joomla CMS обрабатывает компонент в следующей последовательности:

· Joomla интерпретирует полученные значения в URL.

· Ищет составляющую таблицу компонента в базе данных.

· Затем определяет директорию компонента.

· В этой директории запускает исполнительный файл компонента. В данном случае – это файл hello.php.

· Исполняет этот файл.

2.2. Создание точки входа компонента (файл hello.php)

Joomla всегда обрабатывает ссылку в корневом файле index.php для страниц лицевой части сайта или administrator/index.php для страниц административного интерфейса системы. Функция обработки URL загружает требуемый компонент, основанный на значении 'option' в URL (используется метод передачи данных GET) или переданных данных методом POST.

Для разрабатываемого компонента, URL будет выглядеть следующим образом:

index.php? option=com_hello&view=hello

Эта ссылка запускает выполнение файла, являющего точкой входа в компонент: components/com_hello/hello.php.

Ниже приведен листинг файла hello.php:

<?php

// Защита от прямого обращения к скрипту

defined( '_JEXEC' ) or die( 'Restricted access' );

// Подключениефайлаконтроллера.

require_once( JPATH_COMPONENT.DS.'controller.php' );

// Проверка на дополнительные контроллеры

if($controller = JRequest::getVar( 'controller' )) {

require_once( JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php' );

}

// Созданиеклассаконтроллера компонента

$classname = 'HelloController'.$controller;

$controller = new $classname( );

// Выполнитьзадачузапроса

$controller->execute( JRequest::getVar( 'task' ) );

// Переадресация

$controller->redirect();

Рассмотримкодболееподробно:

1) defined( '_JEXEC' ) or die( 'Restricted access' );

Первая строка предотвращает прямой доступ к исполнительному файлу в целях общей безопасности сайта:

2) require_once( JPATH_COMPONENT.DS.'controller.php' );

Следующая строка подключает основной контроллер компонента.

JPATH_COMPONENT - абсолютный путь к текущему компоненту, в данном случае - это components/com_hello.

DS - автоматический выбор слеша (разделителя директорий) '&bsol;' или '/', в зависимости от ОС. Таким образом, разработчик не должен волноваться о том, на какой системе установлена Joomla.

3) if($controller = JRequest::getVar( 'controller' ))

Проверка на наличие вспомогательных контроллеров для компонента. Если таковые присутствуют, то подключаются из директории /controllers компонента. В рассматриваемом случае контроллер всего один.

4)$classname = 'HelloController'.$controller;

$controller = new $classname( );

Создание класса основного контроллера компонента.

5) $controller->execute( JRequest::getVar( 'task' ) );

Получение контроллером текущей задачи из полученного URLвида: index.php?option=com_hello&task=Задача. Если значение taskв переданном URLпустое, по умолчанию используется задача «display», предназначенная для вывода данных. При использовании задачи сохранения или удаления страницы контроллер компонента вызывает перенаправление на другую страницу с помощью строки $controller->redirect();

Фактически, точка входа компонента передает управлению контроллеру компонента для выполнения задачи, которая была определена в полученном запросе.

2.3. Создание контроллера компонента (файл controller.php)

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

Ниже представлен листинг файла controller.php:

<?php

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.application.component.controller');

class HelloController extends JController

{

// метод вывода данных компонента

functiondisplay()

{

parent::display();

}

}

display () - это первый по приоритету метод, он вызывает родительский конструктор. JController :: display () метод определяет название шаблонов вывода запроса и загрузки, которые определяют и устанавливают выбор ветки в дереве задач.

2.4. Создание модели компонента (файл /models/hello.php)

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

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

Наименование моделей строятся следующим образом: название компонента, model, название модели.

В рассматриваемом случае это название приобретет вид HelloModelHello.

Другими словами, основная структура доступа к данным должна быть кратко описана в модели.

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

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

В модели разрабатываемого компонента, будет использовано моделирование события компонента "Hello", которое сгенерирует приветствие. Таким образом, в компоненте будет содержаться один запрос к модели getGreeting () и БД, который возвратит строку "Hello, World!".

Листингфайла/models/hello.php:

<?php

// Защита от прямого обращения к скрипту

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.model' );

class HelloModelHello extends JModel