В первом уроке был создан простой компонент view-controller для CMS Joomla 1.5.
Реализован код вывода приветствия, который является точным образцом MVC.
В этом уроке расширим возможности и гибкость компонента "Hello" добавив Бизнес модель ( Model )
Модель - часть компонента, которая предоставляет данные для Представления по его запросу посланому через Контроллер.
Такой метод часто освобождает от рутинной работы и от хаоса в коде, предоставляет возможность управлять данными удобным способом в дополнение к коду, который посылает запрос данных из Модели.
В Joomla 1.5, Модель будет содержать классы функций:
добавить, удалить и модернизировать информацию в таблицах базы данных.
Также содержать методы восстановления списка таблиц базы данных.
В общем основная структура доступа к данным должна быть кратко описана в модели.
Таким способом, если обработку запроса данных необходимо изменить , который использует дата - файл, базу данных, Модель - единственный элемент, в который вносятся изменения , не затрагивая код Представления ( view) или Контроллера ( controller ).
При переносе точки запроса данных в общем алгоритме компонента, вносятся изменение только в код Представления.
В этом уроке, будем моделировать событие компонента "Hello", которое генерирует приветствие.
Таким образом в компоненте будет один запрос к модели getGreeting (), который возвратит строку "Hello, World!".
Образец кода для класса Модели:
<?php
defined
('_JEXEC')
or
die();
jimport( 'joomla.application.component.model' );
class HelloModelHello extends JModel
{
function getGreeting()
{
return 'Hello, World!';
}
}
Строка, которая начинается с jimport. Эта функция используется, для загрузки файлов Joomla 1.5
В данном случае подгружается структура, которая требуются для нашего компонента.
Этот специфический запрос загрузит файл /libraries/joomla/application/component/model.php.
Точки "." используются как директивные слеши, и последняя часть - имя загружаемого файла.
С помощью этой функции все файлы загружаются из библиотеки ( директория libraries ).
Этот специфический файл содержит определение класса для JModel class, который является необходимым, так как наша модель является продолжением этого класса.
Создав Модель, необходимо изменить Представление, добавить запрос к Модели для получения строки приветствия.
Структура Joomla 1.5 - организована таким способом, что контроллер автоматически загрузит модель, которая имеет то же название что и представление ( view ) и передаст доступ к своему классу . Так как Представление называется "Hello", модель "Hello" будет автоматически загружена и опубликована в представление ( view ). Поэтому, мы можем легко объявить функцию класса модели, используя метод JView:: в строке JView:: getModel ().
В код файла view.html.php вносим изменения
заменяем строку:
$greeting = "Hello World!";
На этот код:
$model = $this->getModel();
$greeting = $model->getGreeting();
Так должен выглядеть полный код файла view.html.php:
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.view');
class HelloViewHello extends JView
{
function display($tpl = null)
{
$model = $this->getModel();
$greeting = $model->getGreeting();
$this->assignRef( 'greeting', $greeting );
parent::display($tpl);
}
}
?>
Для завершения работы над данной версией компонента, необходима в секцию 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>
<!-- The following elements are optional and free of formatting conttraints -->
<creationDate>2007 02 22</creationDate>
<author>Имя Автора</author>
<authorEmail>
Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script
</authorEmail>
<authorUrl></authorUrl>
<copyright>Копирайт</copyright>
<license>Лицензия</license>
<!-- The version string is recorded in the components table -->
<version>Component Version String</version>
<!-- The description is optional and defaults to the name -->
<description>Description of the component ...</description>
<!-- Site Main File Copy Section -->
<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>
<filename>models/index.html</filename>
<filename>models/hello.php</filename>
</files>
<administration>
<!-- Administration Menu Section -->
<menu>Hello World!</menu>
<!-- Administration 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 /admin/ in the package -->
<files folder="admin">
<!-- Site Main File Copy Section -->
<filename>index.html</filename>
<filename>admin.hello.php</filename>
</files>
</administration>
</install>