FL.ru – фриланс сайт удаленной работы №1. Поиск удаленной работы, фрилансеры.

Разрабатываем Model-View-Controller (MVC) компонента. Часть 1 (начало)

Категории: Joomla

Новое программное обеспечение для объединения компонентов (фрэймворк) предоставляет программистам и разработчикам большие полномочия. Почти весь программный код Joomla был изменен кардинальным образом. В качестве примера создадим такой компонент, как Hello Mister. Для того, чтобы вы увидели возможности новой Joomla, компонент будем усложнять по мере его оборачивания новым функционалом. Итак, что такое MVC для тех, кто не знает или подзабыл – это использующаяся для организации кода структура проекта, которая упорядочивает представление информации и логику отдельно друг от друга. Теперь разберем три основные составляющие компонента Model-View-Controller или MVC.

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

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

Controller (контроллер) – это компонент обрабатывает и контролирует все действия пользователя. Controller вызывает Model, которая работает с данными, а затем передает эти данные от модели в вид (из Model во View). То бишь – Controller не отображает информацию, а только осуществляет вызов к модели (Model), которая, в свою очередь, эту информацию изменяет, а затем все тот же контроллер передает модель с данными в вид (View), который и отображается в виде картинки на экране.

В CMS Joomla процесс Model-View-Controller происходит с задействованием этих трех классов.

Теперь приведем и сам пример. Для начала необходимо создать каталог и несколько подкаталогов – сначала создаем каталог com_hello, а в нем подкаталоги site и admin. В каталоге admin будем хранить административные данные, а в site – то, что будет доступно пользователю. Самый простой компонент будет состоять из пяти файлов, это:

  • site/hello.php –точка входа в компонент, она аналогична файлу index.php для сайта
  • site/controller.php –файл, содержащий Controller
  • site/views/hello/view.html.php –файл View. Мы уже рассматривали, для чего он необходим
  • site/views/hello/tmpl/default.php – шаблон
  • hello.xml — файл XML, указывающий joomla на то, как правильно установить компонент. Файл hello.xml нужно поместить в папку с com_hello вместе.

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

Дальше необходимо создать новую входную точку. CMS Joomla всегда работает из единственной точки доступа – это файл index.php для входных данных и administrator/index.php – для данных из БД. Загрузка нужного компонента будет происходить, исходя из значения option, которое передается в адресе или методом POST. Наш адрес будет выглядеть следующим образом: index.php?option=com_hello&view=hello . Данный запрос загружает входную точку components/com_hello/hello.php.

Почти для всех компонентов код этого файла одинаковый:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
< ?php
defined( '_JEXEC' ) or die( 'Restricted access' );
 
// Подключение Controller
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 = '';
 }
}
 // Делаем новый 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() применим для нахождения переменной в адресе или в POST. К примеру, наш адрес будет отображаться так: index.php?option=com_hello&controller=controller_name. В таком случае можно получить необходимый контроллер, применив echo JRequest::getVar(“controller”);  . В нашем примере используется только базовый контроллер HelloController, который находится в com_hello/controller.php. По мере надобности можно добавить еще один контроллер HelloControllerController1 из папки om_hello/controllers/controller1.php. По этому примеру видно, что для облегчения запоминания, да и всей будущей работы нужно использовать стандартные наименования – не запутаетесь впоследствии — {Componentname}{Controller}{Controllername}.

Следующим шагом после создания контроллера будет execute – выполнение контроллером задачи, которая определена в самом адресе: index.php?option=com_hello&task=sometask. По умолчанию (если задачи нет) выполняется функция display. Controller может также переадресовывать страницу, так происходит обычно после сохранения. Основная входная точка hello.php передает все управление на контроллер, который выполняет запрос.

Продолжение статьи читайте во второй части статьи «Разрабатываем Model-View-Controller (MVC) компонента».




Подпишитесь на рассылку блога
max1net.com:
Уже подписались человек
Укажите свой e-mail