Модель-Вид-Контроллер часть 1 - введение
Введение
Структура программного обеспечения - основа, которая может использоваться разработчиком. Framework (структура) Joomla1.5 дает огромные возможности разработчикам.Коротко распишем части компонента MVC:
Модель
Модель- это часть компонента, которая оперирует данными приложения. В нашем случае модель будет содержать методы добавления, удаления, и обновления информации. Таким образом если программа сохраняла данные в файлы, а нам нужно сохранять их в БД, то для этого нужно будет изменить только модель, не трогая остальной код.
Вид
Вид - это часть компонента, которая берет данные из модели и выводит их нам в пользовательский интерфейс. Для простых веб-приложений, Вид генерирует html страницу, с входными данными. Т.е. вид берет данные из модели, и вносит их в шаблон, который в конечном итоге и видит пользователь. Вид не изменяет данные, он только отображает их из модели!
Контроллер
Контроллер отвечает за действия пользователя. В нашем случае, действие пользователя - это запрос страницы. Контроллер в зависимости от запроса, будет вызывать модель, для управления данными, и управлять переходом Модели на Вид. Таким образом контроллер не отображает данные, а лишь вызывает модель, которая изменяет данные, а затем передает модель в вид, который отображается на экране.
Создание компонента
В зависимости от сложности компонентов есть дополнительные директории с файлами для Модели, Представления, и Контроллера.
Каждый компонет находится в своей директории. Joomla обрабатывает компонент в следующей последовательности:
- Joomla! интерпретирует выполненные значения в URL:/index.php?option=com_hello.
- Ищет составляющую таблицу com_hello компонент.
- Затем ищет директорию com_hello.
- В этой директории ищет входящий файл hello.php.
- И исполняет этот файл.
Для нашего основного компонента нам потребуется только пять файлов:
- hello.php – это входная точка в компонент, похожая на index.php для сайтов.
- controller.php – этот файл содержит базовый контроллер
- views/hello/view.html.php – этот файл Вида. Он получает необходимые данные и передает их в шаблон.
- views/hello/tmpl/default.php – сам шаблон.
- hello.xml -это XML файл, который дает указания Joomla как, куда и что устанавливать.
Создание точки входа (hello.php)
Joomla! всегда обрабатывает ссылку в корневом файле index.php для страниц Front End (сайт) или administrator/index.php для страниц Back End (админ). Функция обработки 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::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();
Рассмотрим код более подробно:
Первая строка - проверка безопасности, проверяется относится ли файл к Joomla! или ее директориям.
require_once (JPATH_COMPONENT.DS.'controller.php');
JPATH_COMPONENT - абсолютный путь к текущему компоненту, в наше случае components/com_hello.
Для Front End используется JPATH_COMPONENT_SITE
Для Back End используется JPATH_COMPONENT_ADMINISTRATOR
DS - автоматический выбором слеша (разделителя директорий) '\' или '/', в зависимости от ОС. Таким образом разработчик не должен волноваться о том на какой системе установлена Joomla.
После загрузки основного контроллера проверяется необходимость загрузки дополнительного контроллера. В данном случае у нас только основной контроллер, но мы оставим эту часть для будущего использования.
$classname = 'HelloController';
$controller = new $classname( );
Метод 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.
Если у Вас будет один контроллер, как это часто требуется в программах пользовательского интерфейса, то можно использовать следующие операторы:
$controller=newHelloController();
$controller->execute( JRequest::getVar('task'));
После того, как контроллер создан, мы инструктируем контроллер выполнить задачу, как определено в URL: index.php? option=com_hello& task=Задача. Если нет определение задачи, то по умолчанию будет задача ''display''. Когда используется задача 'display'' , переменная ''display'' укажет то что выводить. Пример стандартных задач - сохранить (save), редактировать (edit), создать (new) и т.л.
$controller->redirect();
Контроллер может принять решение о переадресации страницы, обычно это бывает после задачи “сохранить”.
Основная точка входа (hello.php) по существу передает контроль на контроллер, который обрабатывает задачу, которая была определена в запросе.
Примечание: Как Вы можете видеть в коде нет закрывабщего php тега: ?>. Причина в том, что бы не было никакого нежелательного свободного места в коде вывода. Эта практика началась с Joomla 1.5 и используется во всех файлах содержащих только чистый php.
Создание Контроллера (controller.php)
Наш компонент имеет только одну задачу – вывести надпись “ Hello”. Таким образом, контроллер будет очень простой. Манипуляций с данными не требуется. Все, что нужно сделать - это загрузить Вид. В нашем контроллере будет только один метод display(). Большая часть необходимых функций уже встроена в класс JController, так что все, что нам нужно сделать, это вызвать метод JController::display() .
Код простейшего основного контроллера (controller.php):
Конструктор JController будет всегда регистрировать display() задачу так как у нас она одна и не определена (используется registerDefaultTask() метод), устанавливается default task метод (задача по умолчанию).
display () - это первый по приоритету метод, он вызывает родительский конструктор.
JController :: display () метод определит название layout и layout запроса и загрузки, которые определяют и устанавливают выбор ветки в дереве задач. Когда Вы создаете пункт меню для вашего компонента, менеджер меню позволит администратору выбирать задачу с которой начинать выполнение компонента. К примеру, выбор при создании пункта меню таких задач: вывод списка автомобилей, вывод списка событий, вывод данных по одному автомобилю, вывод отдельного случая. Layout - путь, которым задается вывод определенной задачи.
Например - Вы создаете вид вывода категории списком или блогом.
Создание Представления (Вида) (/views/hello/view.html.php)
Задача очень проста: Извлекаем данные, которые будут отображаться, и передаем их в шаблон. Данные передаеются в шаблон, с помошью метода JView::assignRef() класса JView.
Код вида будет (view.html.php):
Создание шаблона(/views/hello/tmpl/default.php)
Наш шаблон очень прост, мы только отображаем приветствие, которое передавали в view (default.php):
Создание установочного файла (hello.xml)
Можно установить компонент вручную, копирую файлы по FTP протоколу создавая необходимые папки и таблицы в базе данных, но лучшим вариантом является использования установочного файла для пакетной загрузки файлов и установки компонента.
Установочный XML файл может содержать разнообразную информацию и инструкции по установке:
- Детали о компоненте и о авторе компонента;
- Список файлов, которые должны быть скопированы;
- Внешний PHP файл, который исполняет дополнительную установку и деинсталлирует операции;
- Внешние 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>20.02.2009</creationDate>
<author>Имя автора</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>
Как видно из этого кода у нас должно быть две директории: site и admin. В директорию site копируем все созданные файлы, кроме hello.xml. В директории admin создаем пустой файл admin.hello.php
Также есть файлы, которые будут скопированы, это - index.html.
index.html помещен в каждый каталог, чтобы препятствовать пользователям получать листинг каталога.
Эти файлы содержат одну единственную строку:
С помощью этих файлов будет отображаться пустая страница.
В итоге весь листинг компонента будет таким:
Как посмотреть на свое творение?
Можно в браузере набрать http://ДОМЕН/index.php?option=com_hello. Так же можно создать пункт меню на компонент, для этого зайти в главное меню, дальше создайте в нем новый пункт Hello Word! (разметка будет default, т.к. она одна), на сайте перейдя на этот пункт откроется компонент com_hello.
0
Последние материалы
- 08.01.2010 Создаем AJAX компонент с использованием Mootools
- 06.01.2010 Создаем простой AJAX компонент
- 03.03.2009 Модель-Вид-Контроллер часть 1 - введение
- 02.03.2009 Модель-Вид-Контроллер часть 2 - использование Модели
- 01.03.2009 Модель-Вид-Контроллер часть 3 - использование БД
- 10.02.2009 Модель-Вид-Контроллер часть 4 - интерфейс Администратора