Создание Model-View-Controller компонента часть 2 - добавление модели
Введение
В первой части нашего руководства мы создали простой компонент, состоящий всего из двух частей: представление и контроллер. Текст приветствия был жестко прописан в коде представления. Это не является хорошим примером MVC, поскольку представление предназначено только для того чтобы отображать данные и не должно содержать их. Во второй части руководства мы продемонстрируем, как перенести эти данные из представления в модель. В следующих частях мы покажем всю мощь и гибкость данного подхода.
Создание модели
Модель получила такое название, потому что этот класс призван представить (или смоделировать) какой-либо объект. В наше случае наша первая модель будет представлять приветствие. Это соответствует нашему проекту, потому что у нас есть одно представление, показывающее наше приветствие.
В соответствии с соглашением о наименовании моделей принятом в Joomla название класса должно начинаться с названия компонента (в нашем случае сначала идет слово «hello» потом «model», а потом снова «hello»). Поэтому класс нашей модели называется HelloModelHello.
Здесь мы смоделируем только одно действие нашего «hello». Наша модель будет выводить приветствие. Таким образом, у нас будет всего один метод, который называется getGreeting(). Он возвращает строку «Hello World!».
Вот код класса нашей модели:
/**
* Hello Model for Hello World Component
*
* @package Joomla. Tutorials
* @subpackage Components
* @link http://docs. joomla. org/Developing_a_Model-View-Controller_Component_-_Part_2
* @license GNU/GPL
*/
// No direct access
defined( "_JEXEC" ) or die( "Restricted access" );
jimport( "joomla. application. component. model" );
/**
* Hello Model
*
* @package Joomla. Tutorials
* @subpackage Components
*/
class HelloModelHello extends JModel
/**
* Gets the greeting
* @return string The greeting to be displayed to the user
*/
function getGreeting()
return "Hello, World!";
В начале кода, как и везде, идет проверка безопасности. А за ней следует вызов функции jimport. Она подключает файлы Joomla необходимые для нашего компонента. В данном случае мы загрузили файл /libraries/joomla/application/component/model. php. Точки являются разделителями директорий, а последнее слово («model») – название файла. Путь для загрузки любых файлов с помощью этой функции строиться относительно папки libraries. Файл model. php содержит описание класса JModel, который необходим нам, т. к. модель является потомком этого класса.
Теперь у нас есть код, создающий нашу модель. Нам теперь надо изменить представление, чтобы оно могло выводить приветствие.
Использование модели
Joomla устроена таким образом что контроллер автоматически загрузит модель, имеющую такое же имя как и представление и поместит его в это представление. Поскольку наше представление называется «Hello», модель с тем же названием будет загружена автоматически и помещена в него. Поэтому мы можем легко получить ссылку на нашу модель, использую метод JView::getModel() (Если модель имеет другое наименование, мы можем передать его в JView::getModel())
Наш предыдущий код представления содержал строку:
$greeting = "Hello World!";
Теперь нам надо заменить ее на следующие строки:
$model =& $this->getModel();
$greeting = $model->getGreeting();
Полностью код представления будет выглядеть так:
<?php
/**
* @package Joomla. Tutorials
* @subpackage Components
* @link http://docs. joomla. org/Developing_a_Model-View-Controller_Component_-_Part_2
* @license GNU/GPL
*/
// No direct access
defined( "_JEXEC" ) or die( "Restricted access" );
jimport( "joomla. application. component. view");
/**
* HTML View class for the HelloWorld Component
*
* @package HelloWorld
*/
class HelloViewHello extends JView
function display($tpl = null)
$model =& $this->getModel();
$greeting = $model->getGreeting();
$this->assignRef( "greeting", $greeting );
parent::display($tpl);
Добавление файла в hello. xml
Все что осталось это добавить ссылки в xml файл, чтобы Joomla могла скопировать нужные файлы при установке. Joomla будет искать нашу модель в папке models так что ссылка на нее должна выглядеть так:
<filename>models/hello. php</filename>
Новый файл 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 conttraints -->
<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>models/hello. php</filename>
<filename>models/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>
Заключение
Теперь у нас есть простой MVC компонент. Каждая его часть очень проста, но все вместе дает довольно большую гибкость в использовании.
Статья здесь Часть 3