Создание Model-View-Controller компонента часть 1 |
Данное руководство посвящено разработке компонента в Joomla 1.5 с использованием технологии framework и схемы MVC. Вы пройдете через весь процесс его создания. В итоге будет разработан простой компонент Hello World! Он будет усложняться в следующих частях руководства, чтобы показать все мощь и гибкость схемы MVC. Требования: Введение в схему Model-View-Controller Не смотря на то, что идея компонента может показаться слишком простой, код будет усложняться путем добавления новых свойств и разработкой пользовательского интерфейса. Схема MVC может быть использована для такой организации кода, при которой происходит отделение бизнес-логики от представления данных. Вся бизнес-логика размещена в одном месте, что позволяет легко изменять интерфейс или способ взаимодействия с пользователем без изменения самой бизнес-логики.
MVC изначально был разработан для того чтобы производить ввод, обработку информации и получение результата в соответствии с логикой архитектуры GUI. Это являются основой схемы MVC в Joomla. Модель Модель представляет собой часть компонента, которая инкапсулирует данные приложения. Чаще всего она является подпрограммой для управления и манипулирования этими данными. В нашем случае модель будет содержать методы для добавления, удаления и обновления информации о списке встреч в базе данных, а также для получения этого списка. В общем, доступ к данным должен быть инкапсулирован в модели. Таким образом, если приложение должно быть перемещено из системы, которая использует неструктурированный файл для хранения информации в систему, использующую базу данных необходимо изменить только модель, а представление или контролер останутся неизменными. Представление Представление это часть компонента, которая используется для отображения данных в манере удобной пользователю. Для веб-приложений представление было бы HTML страницей с данными. Оно извлекает данные из модели и помещает их в шаблон, который показывается пользователю. Представление не может модифицировать данные, оно только отображает их. Контроллер Контроллер отвечает на действия пользователя. В нашем случае действие пользователя – это запрос страницы. Контроллер определит какой запрос выполнен пользователем и ответит вызовом модели для того чтобы подходящим образом манипулировать данными и отправить их в представление. Он не отображает данные, а только запускает методы в модели, которые модифицируют данные и затем помещает их в представление, которое отображает их. Связь MVC Рисунок справа иллюстрирует использование основных компонентов в Joomla. Кроме модели, представления и контролера на рисунке изображены точка входа в виде маленького кружечка и шаблон. Эти пять компонентов дадут вам возможность понять, как создаются MVC компоненты в Joomla. Первая часть руководства сфокусирована на контроллере и представлении (с использованием шаблона). На рисунке они отмечены синим цветом. Вторая часть добавляет модель, а третья часть расширяет ее функциональность. Она отмечена зеленым цветом на рисунке. Имейте ввиду, что эта схема применяется только к пользовательской части сайта, хотя такая же схема применима и к административной части. Об административной части сайта речь пойдет, начиная с четвертой части этого руководства. Обе части описаны и сконфигурированы в инсталляционном xml файле.
В Joomla модель MVC реализована с помощью трех классов: JModel, JView, Jcontroller. Создание компонента В начале для нашего компонента понадобиться все лишь пять файлов: 1. site/hello. php – это точка входа компонента; Запомните, что имя файла точки входа должно быть такое же как и у компонента. Например, вы назвали компонент "Very Intricate Name Component", во время установки (смотри ниже в файле hello. xml) Joomla создаст папку с именем «com_veryintricatenamecomponent» и файл точки входа должен быть назван veryintricatenamecomponent. php, а иначе компонент работать не будет. Обратите внимание, что надо избегать использования в названии компонентов и файлов специальных символов. Создание точки входа Доступ к компонентам в Joomla всегда происходит только через одну точку входа: index. php для сайта или administrator/index. php для административной части. Затем приложение загрузит нужный компонент, значение которого определено в параметре ‛option‛ в URL или передано методом POST. Для нашего компонента URL будет: Index. php? option=com_hello&view=hello Эта ссылка загрузит наш основной файл, который является точкой входа для нашего компонента: components/com_hello/hello. php. Код этого файла стандартный для многих компонентов. Site/hello. php: <?php
JPATH_COMPONENT – это абсолютный путь к компоненту, в нашем случае components/com_hello. Можно также использовать JPATH_COMPONENT_SITE – путь к компоненту сайта, JPATH_COMPONENT_ADMINISTRATOR – путь к административной части. После того как контроллер создан, мы даем ему команду выполнить задачу, которая определена в URL: index. php? option=com_hello&task=sometask. Если задача не установлена, то по умолчанию будет ‛display‛. Когда используется задача ‛display‛ переменная ‛view‛ укажет, что должно быть отображено. Другими задачами являются save, edit, new и тд. Обычно, когда выполняется задача ‛save‛ контролер решает, что надо перенаправить страницу. Последняя инструкция осуществляет перенаправление. Создание контроллера Наш компонент выполняет только одну задачу – приветствует мир. Поэтому контроллер будет очень простой. Нам не требуется никакая манипуляция данными. Все что надо уже есть в загруженном представлении. Большая часть необходимых функциональных возможностей встроена в класс JController, таким образом, все что мы должны сделать это вызвать метод JController::display(). <?php Конструктор Jcontroller всегда будет регистрировать задачу display() пока не будет определено что-нибудь другое. Эта задача будет устанавливаться по умолчанию. Когда вы создаете пункт меню для вашего компонента, менеджер меню позволит администратору выбрать представление, которое бы отображало либо конкретный данные, либо их схему. Обычно представление ссылается на определенный набор данных, например список машин, список событий, конкретная машина, конкретное событие. Схема это способ, с помощью которого организовано представление. Создание представления Задача представления очень простая: оно получает данные и помещает их в шаблон. Данные помещенные в шаблон используются методом JView::assignRef. Наше представление находиться в файле: site/views/hello/view. html. php. Вот его код: <?php Создание шаблона Шаблоны Joomla это PHP файлы, которые используются, чтобы разместить данные полученные от представления в определенной манере. Переменные, определенные методом JView::assignRef могут быть доступны в шаблоне при использовании конструкции $this->{имя свойства} (смотри код шаблона в примере). Наш шаблон очень прост: он всего лишь отображает приветствие, которое он получил от представления. Файл шаблона: site/views/hello/tmpl/default. php <?php Создание файла hello. xml Есть возможность установить компонент в ручную, копируя файлы через FTP и создавая таблицы базы данных. Однако же легче создать пакетный файл, который позволит Joomla сделать все за нас. Этот пакетный файл содержит различную информацию: Формат файла hello. xml: <?xml version="1.0" encoding="utf-8"?><install type="component" version="1.5.0"> <name>Hello</name> <!-- The following elements are optional and free of formatting constraints --> <creationDate>2007-02-22</creationDate> <author>John Doe</author> <authorEmail>John. doe@example. org</authorEmail> <authorUrl>Http://www. example. org</authorUrl> <copyright>Copyright Info</copyright> <license>License Info</license> <!-- The version string is recorded in the components table --> <version>1.01</version> <!-- The description is optional and defaults to the name --> <description>Description of the component...</description> <!-- Site Main File Copy Section --> <!-- Note the folder attribute: This attribute describes the folder To copy FROM in the package to install therefore files copied In this section are copied from /site/ in the package --> <files folder="site"> <filename>Controller. php</filename> <filename>Hello. php</filename> <filename>Index. html</filename> <filename>Views/index. html</filename> <filename>Views/hello/index. html</filename> <filename>Views/hello/view. html. php</filename> <filename>Views/hello/tmpl/default. php</filename> <filename>Views/hello/tmpl/index. html</filename> </files> <administration> <!-- Administration Menu Section --> <menu>Hello World!</menu> <!-- Administration Main File Copy Section --> <files folder="admin"> <filename>Hello. php</filename> <filename>Index. html</filename> </files> </administration> </install> Если вы изучили xml код внимательно, то должны были заметить, что в нем содержаться описания файлов, которые мы еще не обсуждали. Это файл index. html. Его надо поместить в каждую папку, чтобы любопытные пользователи не могли получить список файлов в директории. Если этого не сделать, то некоторые веб-сервера выдадут такой список. Не хотелось бы что бы это произошло. Этот файл содержит всего одну строку: <html><body bgcolor="#FFFFFF"></body></html>Он просто показывает пустую страницу.
|