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

02/03/2009 Создание компонента Joomla 1.5
В первом уроке был создан простой компонент 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 компонент. Каждый элемент очень прост в данный момент, но компонент уже обладает более большей гибкостью и возможностью.

 

Вложения:
com_hello2.zip[ ] (1193) Загрузок

11 

Комментарии   

 
0 Гость ресурса
15.04.2010 10:22
битая ссылка на архив с готовым компонентом.. исправьте пожалуйста...
Ответить
 
 
+1 Александр
01.03.2011 00:55
Спасибо за хороший мануал.
Ответить
 
 
+1 Alexsey Beluaev
24.05.2011 00:29
Добрый день .
Будте добры описание того, как достать часть компонента из админ панели и установки его на нужную страницу сайта.

Буду оч. признателен, даже возможно начать дискуссию по этому поводу в скайпе, так же есть вопросы нерешённые которые надо решить, или возможно напишите на майл .

Необходимо описать процес создания прав на полуение этого кода из админки ::root неподходит а больше я нечего незнаю, да и в интернете похожих сиаией нет.
Ответить
 
 
-5 Алексей Беляев
26.05.2011 00:14
Я могу создать компонент так как снаю как прикрутить этот шаблон к сайту...
Но вы не ответили , и страшно мне становится когда все молчат, может быть вы умерли ? А сайт еще работает, а на кого завещание
Ответить
 
 
0 TriniX
19.01.2012 10:17
А разве файл шаблона не надо изменять? А то там помоему как выводил статичную надпись, так и выводит
Ответить
 
 
0 Rhea
06.06.2016 11:49
Excellent post. I will be going through a few of these issues as well..


Here is my web site biustonosze axami: https://blogbielizna.wordpress.com/2014/08/28/biustonosze-axami/
Ответить
 
 
0 Jacob
10.08.2016 18:45
Howdy just wanted to give you a quick heads up. The text in your content seem to be running off the screen in Ie.

I'm not sure if this is a formatting issue or something to do with internet browser compatibility but I thought
I'd post to let you know. The design and style look great
though! Hope you get the problem solved soon. Kudos

Feel free to visit my site ... metadrol: http://www.kulturystyka24.com/metadrol-dziala/
Ответить
 
 
0 Natalie
19.01.2017 04:37
Quisiera felicitarles por las entradas tan buenas que tiene este blog.
Gracias.

My site ... anuncios: http://www.buscadisimo.com/las-palmas-r781309
Ответить
 

Добавить комментарий


Защитный код
Обновить