Создание модели компонента (файл /models/hello.php)

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

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

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

В рассматриваемом случае это название приобретет вид HelloModelHello.

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

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

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

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

 

Листинг файла /models/hello.php:

<?php

// Защита от прямого обращения к скрипту

defined('_JEXEC') or die('Restricted access');

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

class HelloModelHello extends JModel

{

    function getGreeting()

    {

              $db =& JFactory::getDBO();

              $query = 'SELECT greeting FROM #__hello';

              $db->setQuery($query);

        $greeting = $db->loadResult();

              return $greeting;

    }

}

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

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

Для подключения к базе данных сайта используется статический класс JFactory и метод getDBO. Данный метод уже содержит все параметры подключения, поэтому ничего дополнительного указывать не нужно.

$db->loadResult() выполняет запрос из соответствующей таблицы БД и возвращает полученное значение в заданную переменную, в данном случае это переменная $greeting.

Создание вида компонента (файл /views/hello/view.html.php)

Задача этого файла разрабатываемого компонента очень проста – получить данные из модели компонента, которые будут отображаться на сайте и передать их в шаблон для конечного оформления вывода. Данные передаются в шаблон с помощью метода JView::assignRef() класса JView.

 

Листинг файла /views/hello/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);

}

}

 

 

Создание шаблона данных (файл /views/hello/tmpl/default.php)

Поскольку компонент очень прост и предназначен для вывода приветствия, в этом файле выводится значение переменной из Вида компонента.

 

Листинг файла /views/hello/tmpl/default.php:

<?php

defined('_JEXEC') or die('Restricted access');?>

<h1><?php echo $this->greeting;?></h1>{

 

Создание точки входа компонента для административного интерфейса (файл /admin/hello.php)

Основная среда административной части компонента очень похожа на среду лицевой части. Основной точкой входа также является файл hello.php. Этот файл идентичен файлу hello.php, который используется на сайте, кроме того, что имя загружаемого контроллера, должно быть изменено.Файл Контроллера по умолчанию также называется controller.php, и является идентичным контроллеру по умолчанию в лицевой части компонента, с тем отличием, что контроллер также должен иметь другое название.

 

Листинг файла /admin/hello.php:

<?php

defined('_JEXEC') or die('Restricted access');

require_once(JPATH_COMPONENT.DS.'controller.php');

 

if($controller = JRequest::getWord('controller')) {

$path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';

if (file_exists($path)) {

   require_once $path;

} else {

   $controller = '';

}

}

 

$classname = 'HellosController'.$controller;

$controller = new $classname();

$controller->execute(JRequest::getVar('task'));

$controller->redirect();

 

Создание модели компонента для административного интерфейса (файл /admin/models/hellos.php)

Единственным действием модели Hellos является возможность получения списка приветствий из базы данных. Это действие выполняется с помощью метода getData().

Класс JModel имеет встроенный защищенный метод _getList(). Этот метод может использоваться для упрощения задачи получения списка записей из базы данных. Достаточно лишь просто выполнить запрос, и он возвратит список записей.

Позже может возникнуть необходимость использовать запрос в другом методе. Для этого используется защищенный метод _buildQuery(), который возвращает запрос, передаваемый методу _getList(). Это облегчает изменение запроса, поскольку он вызывается из одного и того же места.

 

Метод _buildQuery() просто возвращает запрос. Это выглядит примерно следующим образом:

  function _buildQuery()

{

$query = ' SELECT * '

     . ' FROM #__hello '

;

return $query;

}

 

Метод getData() получает запрос и извлекает записи из базы данных.

Листинг файла /admin/models/hellos.php:

<?php

defined('_JEXEC') or die();

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

class HellosModelHellos extends JModel

{

function _buildQuery()

{

   $query = ' SELECT * '

      . ' FROM #__hello '

  ;

   return $query;

}

function getData()

{

   if (empty($this->_data))

   {

       $query = $this->_buildQuery();

       $this->_data = $this->_getList($query);

   }

    return $this->_data;

}

}

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: