Модель-Вид-Контроллер часть 2 - использование Модели

HTML / CSS
В первом уроке был создан простой компонент view-controller для CMS Joomla 1.5. Приветствие (Hello) было жестко прописано в Представлении. Это не соответствует MVC, так как Представление предназначено для того, чтобы отображать данные, а не содержать их.
В этой части расширим возможности и гибкость компонента "Hello" добавив к компоненту Модель (Model).

Создание модели (/models/hello.php)

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

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

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

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

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

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

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

Образец кода для класса Модели:

<?php
// No direct access
 
defined( '_JEXEC' ) or die( 'Restricted access' );
 
jimport( 'joomla.application.component.model' );
 
class HelloModelHello extends JModel
{
/**
* Gets the greeting
* @return string The greeting to be displayed to the user
*/

function getGreeting()
{
return 'Hello, World!';
}
}
jimport( 'joomla.application.component.model' );

Обратите внимание на эту строку. Функция jimport используется, чтобы загрузить файлы из структуры Joomla, которые требуются для нашего компонента. В данном случае загрузится файл /libraries/joomla/application/component/model.php. Точки используются как разделители директорий. Все файлы загружаются относительно директории библиотек - libraries.

В данном случае подключается файл из библиотеки - model.php. Это специальный файл, который описывает класс JModel, он нам необходим, потому что наша модель расширяет этот класс.

Теперь, когда мы создали модель, мы должны изменить Представление так, чтобы оно использовала данные от модели.

Использование модели

Структура Joomla! (framework) устроенна таим образом, что контроллер автоматически загрузит модель в Представление, если Модель имеет то же название что и Представление. Так как у нас названия совподают, то можно использовать метод JView:: getModel ().

В предидущей части Представление было таким:

$greeting = "Hello World!";

Теперь, с использованием Модели, оно будет таким:

$model =& $this->getModel();
$greeting = $model->getGreeting();

Конечный код Представления (/views/hello/view.html.php) будет:

<?php
 
// 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

Для завершения работы над данной версией компонента, необходима в секцию Site (Front End) добавить файлы Модели:

<filename>models/hello.php</filename>

Новый файл hello.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>November</creationDate>
<author>Nobody</author>
<authorEmail>nobody@example.org</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<version>Component Version String</version>
<description>description of the component ...</description>
<!-- Site Main File Copy Section -->
<files folder="site">
<filename>models/hello.php</filename>
<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>
<!-- Administration Menu Section -->
<menu>Hello World!</menu>
<!-- Administration Main File Copy Section -->
<files folder="admin">
<!-- Site Main File Copy Section -->
<filename>index.html</filename>
<filename>admin.hello.php</filename>
</files>
</administration>
</install>

 

Заключение

Мы теперь имеем простой MVC компонент. Каждый элемент очень прост в данный момент, но компонент уже обладает более большей гибкостью и возможностью.

 


0