Основы разработки компонентов для Joomla! CMS 1.5

Автор работы: Пользователь скрыл имя, 16 Ноября 2010 в 16:53, Не определен

Описание работы

Курсовая работа

Файлы: 1 файл

Курсовая работа Колмаков Р.А..doc

— 506.00 Кб (Скачать файл)

$classname    = 'HelloController'.$controller;

$controller   = new $classname( );

// Выполнить задачу запроса

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

// Переадресация

$controller->redirect();

     Рассмотрим код более подробно:

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

     Первая  строка предотвращает прямой доступ к исполнительному файлу в  целях общей безопасности сайта:

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

     Следующая строка подключает основной контроллер компонента.

     JPATH_COMPONENT - абсолютный путь к текущему  компоненту, в данном случае - это components/com_hello.

     DS - автоматический выбор слеша  (разделителя директорий) '\' или '/', в зависимости от ОС. Таким  образом, разработчик не должен волноваться о том, на какой системе установлена Joomla.

     3) if($controller = JRequest::getVar( 'controller' ))

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

     4) $classname    = 'HelloController'.$controller;

         $controller   = new $classname( );

     Создание  класса основного контроллера компонента.

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

     Получение контроллером текущей задачи из полученного URL вида: index.php?option=com_hello&task=Задача. Если значение task в переданном URL пустое, по умолчанию используется задача «display», предназначенная для вывода данных. При использовании задачи сохранения или удаления страницы контроллер компонента вызывает перенаправление на другую страницу с помощью строки $controller->redirect(); 

     Фактически, точка входа компонента передает управлению контроллеру компонента для выполнения задачи, которая была определена в полученном запросе. 

2.3. Создание контроллера компонента (файл controller.php)

     Поскольку разрабатываемый компонент предназначен лишь для представления основ  реализации компонентов под Joomla, контроллер этого компонента – очень простой. В некоторых больших компонентах число строк контроллера достигает до нескольких тысяч. В контроллере компонента «Hello» используется только один метод - display(). Большая часть необходимых функций уже встроена в класс JController, так что все, что требуется, это вызвать метод JController::display() . 

Ниже  представлен листинг файла controller.php:

<?php

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

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

class HelloController extends JController

{

// метод вывода данных компонента

function display()

{

parent::display();

}

} 

     display () - это первый по приоритету метод, он вызывает родительский конструктор. JController :: display () метод определяет название шаблонов вывода запроса и загрузки, которые определяют и устанавливают выбор ветки в дереве задач.  
 
 
 

2.4. Создание модели компонента (файл /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.

2.5. Создание вида компонента (файл /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);

    }

}  

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

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

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

     <?php 

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

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

2.7. Создание точки входа компонента для административного интерфейса (файл /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();

2.8. Создание модели компонента для административного интерфейса (файл /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()

Информация о работе Основы разработки компонентов для Joomla! CMS 1.5