RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

Создание MVC компонента Joomla 1.5 - Шаг 2, Добавляем Модель

Текст ниже основан на комопоненте view-controller для CMS Joomla 1.5. Для полного понимания статьи можно прочитать создание комопонета «Hello world», где в итоге получается простейший компонент приветствия, который можно считать образцом кода MVC. Он прост и фактически ничего не делает поэтому необходима модель, создание которой мы рассмотрим ниже.

Создание модели

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

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

При подобной реализации вся обработка данных ложиться на модель и если вдруг случиться такое, что нам необходимо изменить источник данных с MySQL на RSS-ленту, то изменится только модель, не затрагивая всего остального кода — шаблона (он же Вид, Представление, View) и контроллер (controller).

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

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

Код модели для компонента "Hello Word"

<?php
/**
 * Hello Модель для "Hello" Компонета
 * 
 */


// Check to ensure this file is included in Joomla!
defined ('_JEXEC') or die();

jimport( 'joomla.application.component.model' );

/**
 * Hello Model
 * @package    Автор
 * @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

Точки "." используются как директивные слеши, и последняя часть - имя загружаемого файла. Таким образом можно загружать любые библиотеки из директории "libraries".

Это специфический файл содержит определение класса JModel, который является необходимым для нормальной работы модели компонента, поэтому наш класс должен его расширять.

Создав Модель, необходимо изменить Представление - добавить запрос к Модели для получения строки приветствия.

Используем Модель ( Model ) в Представление ( view )

Структура Joomla - организована таким способом, что контроллер автоматически загрузит модель, которая имеет то же название что и представление (view) и передаст доступ к своему классу. Так как Представление называется "Hello", модель "Hello" будет автоматически загружена и опубликована в Представление (view). Поэтому, мы можем легко объявить функцию класса модели, используя метод класса JView::getModel().

В код файла view.html.php вносим изменения. Заменяем строку:

$greeting = "Hello World!";

На строку

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

Так должен выглядеть итоговый код файла view.html.php:

<?php
/**
 * Hello View for Hello World Component
 * @package    	Автор
 * @subpackage 	Components
 * @link			components/views/hello/view.html.php
 * @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    Joomla.Tutorials
 * @subpackage Components
 */
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>

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

Прикрепленные файлы:
Компонент Joomla 1.5 Hello world, с моделью
Объем: 5.09 KB; Тип: zip; Загрузок: 1107; в сутки: ~1; Обновлен: 14:19, 24 Июля 2011;
Смотрите также:
Комментарии (5) Добавить комментарий
  • Владимир
    Владимир
    19 Ноября 2011, 01:36
     ↑  +8  ↓     ответ

    Что за постоянный плагиат, куча сайтов и на всех один и тот же пример!!! Вот и кому это может быть интересно! Напишите что-нибудь уже своё, если у Вас есть знания в программировании

    • Рейкбек
      Рейкбек
      02 Октября 2012, 17:53
       ↑  -4  ↓     ответ

      не нравится, не читайте, ищите уникальное или пишите свое, когда разберетесь.

  • Alex
    Alex
    20 Ноября 2012, 11:32
     ↑  0  ↓     ответ

    В тексте не указано, что файл модели нужно назвать hello.php и вложить в новую папку models папки компонента фронт-енда. Без прикрепленного файла непонятна файловая структура получившихся изменений.

  • Vit
    Vit
    15 Марта 2013, 20:06
     ↑  0  ↓     ответ

    Спасибо, очень хорошее описание, еще хотелось бы материал в котором рассказывается, как это все упаковывать следует

  • Сергей
    Сергей
    13 Мая 2014, 18:10
     ↑  0  ↓     ответ

    Спасибо отличная статья. Пока что все доходчиво. Даже разобрался что 'greeting' можно изменить например на myVar и потом в шаблоне вызвать например так <?php echo $this->myVar ; ?>, можно так же передавать несколько таких переменных связанных с функциями в модели.

    Спасибо ребята отличный проект

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.