В этом уроке мы создадим простой компонент, который строчку «Hello!» в браузере.
Перед тем, как начать создавать компонент, у Вас на сервере должна быть установлена CMS Joomla 1.5. Если Вы еще не установили, то это можно сделать с помощью уроков в разделе «Установка Joomla».

В этом уроке сначала создадим папку компонента под названием com_hello, в которую нам нужно добавить пять файлов:
site/hello.php - точка входа в наш компонент;
site/controller.php - содержит наше основное управление компонентом (Контроллер);
site/views/hello/view.html.php - обрабатывает данные и передает их в шаблон для вывода;
site/views/hello/tmpl/default.php - шаблон для вывода данных;
hello.xml- XML служит для передачи инструкций для Joomla по установке компонента.

В следующих уроках мы будем добавлять еще файлы, и общая файловая структура нашего компонента будет выглядеть так, как показано на рис. 2.1. Скачать архив с исходными кодами можно здесь.

Рис. 2.1. Структура компонента.

CMS Joomla всегда обрабатывает ссылку в корневом файле index.php для страниц Front End (сайт) или administrator/index.php для страниц Back End (админ-панель). Функция обработки URL загрузит требуемый компонент, основанный на значении 'option' в URL (метод GET) или переданных данных методом POST.

Для нашего компонента, URL выглядит так:
index.php?option=com_hello&view=hello

Это означает, что если пользователь введет в браузере строчку http://имя сайта/index.php?option=com_hello&view=hello, то переменная «option» получит значение «com_hello&view=hello».

Эта ссылка запустит выполнение файла, являющего точкой входа в наш компонент:

http://имя сайта/components/com_hello/hello.php.

Код для этого файла довольно типичен для всех компонент:

<?php
/**
 * @package    Autor
 * @subpackage Components
 * components/com_hello/hello.php
 * @link http://autor.net/
 * @license    GNU/GPL
*/

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

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

// Подключение файла контроллера.

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

// Проверка или требуется определенный контроллер
if($controller = JRequest::getVar( 'controller' )) {
    require_once( JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php' );
}

// Создание класса нашего компонента
$classname    = 'HelloController'.$controller;
$controller   = new $classname( );

// Выполнить задачу запроса
$controller->execute( JRequest::getVar( 'task' ) );

// Переадресация
$controller->redirect();

?>

Примечание к коду:

JPATH_COMPONENT – это абсолютный путь к текущему компоненту; в наше случае - components/com_hello.
Для Front End - JPATH_COMPONENT_SITE
Для Back End - JPATH_COMPONENT_ADMINISTRATOR
DS означает автоматический выбор слеша (разделителя директорий ) '\' или '/'.
JRequest:getVar() находит переменную в URL (или в данных POST).  Например, наш URL может выглядеть так index.php?option=com_hello&controller=controller_name, тогда мы можем получить имя нужного нам контроллера, используя:
echo JRequest::getVar(“controller”).

Сейчас мы используем наш базовый контроллер-класс HelloController в com_hello/controller.php. При необходимости, добавляем контроллер HelloControllerController1 из com_hello/controllers/controller1.php.

Такой стандарт упрощает схему многозадачного компонента (это будет использоваться в последующих уроках, в данном случае в нашем компоненте одна задача).

Теперь мы инструктируем контроллер исполнить задачу, которая определена в URL: index.php?option=com_hello&task=sometask. Если нет определения задачи, то по умолчанию будет задача 'display'. Когда используется задача 'display' , переменная 'display' укажет то, что выводить. Пример стандартных задач - save, edit, new...

На последней строке кода контроллер переадресовывает страницу. Обычно используется для таких задач как SAVE.

Главная точка входа (hello.php) пропускает управление на контроллер, который обрабатывает выполнение задачи, которая была определена в запросе.

Создание Контроллера

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

Код основного контроллера site/controller.php такой:

<?php
/**
 * @package    Autor
 * @subpackage Components
 * @link http://autor.net/
 * @license    GNU/GPL
 */

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

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

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

/**
 * Hello World Component Controller
 *
 * @package    Joomla.Tutorials
 * @subpackage Components
 */
class HelloController extends JController
{
    /**
     * Method to display the view
     *
     * @access    public
     */
    function display()
    {
        parent::display();
    }

}
?>

Конструктор JController будет всегда по умолчанию регистрировать задачу display() используя метод registerDefaultTask(), если не определена другая задача.  В самом деле, метод display() не нужен после того, но в нашем случае он есть хорошей демонстрацией того, что делает контроллер.  

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

В нашем компоненте, view имеет единственное значение - hello и шаблон имеет единственное значение - default (по умолчанию).

Создание вида (view)

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

Код Вида в файле site/views/hello/view.html.php  следующий:

<?php
/**
 * @package    Autor
 * @subpackage Components
 * @link http://autor.net/
 * @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    HelloWorld
 */

class HelloViewHello extends JView
{
    function display($tpl = null)
    {
        $greeting = "Hello World!";
        $this->assignRef( 'greeting',	$greeting );

        parent::display($tpl);
    }
}
?>

Создание шаблона

Joomla шаблоны являются файлами PHP, которые создают вид данных. Переменные, переданные с помощью метода JView::assignRef можно получить из шаблона с помощью $this->propertyname.
В нашем простом шаблоне site/views/hello/tmpl/default.php мы только выводим на экран приветствие.

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

greeting; ?>

Создание hello.xml

Компонент можно установить вручну путем копирования файлов с помошью FTP-клиента на сервер, и модификации базы данных.

Но лучше создать xml файл, и тогда Установщик Joomla все сделает за вас. XML файл может содержать разнообразную информацию и инструкции по установке:

  • Общую информацию о компоненте и авторе.
  • Список файлов, которые нужно скопировать из архива, с указанием куда копировать;
  • По-необходимости можно добавить скрипты сопровождающие установку и удаление компонента;
  • По-необходимости можно добавить файлы с sql-запросами, которые будут выполняться при установке и удалении компонента.

Наш XML файл выглядит так:




 Hello
 
 2007 02 22
 Имя Автора
 author собачка mail.net
 http://www.autor.net 
 Копирайт
 Лицензия
 
 Component Version String
 
 Description of the component ...

 
 
 
  index.html
  hello.php
  controller.php
  views/index.html
  views/hello/index.html
  views/hello/view.html.php
  views/hello/tmpl/index.html
  views/hello/tmpl/default.php
 
 
 
  
  Hello World!
  
  
  
   index.html
   admin.hello.php
    
 


Создайте также в каталоге admin файлы admin.hello.php и index.html. Оставьте их пока пустыми.
Как Вы заметили, каждая папка имеет файлы index.html (рис. 2.1). Файлы index.html помещают в каждый каталог, чтобы препятствовать пользователям получать листинг каталога.
Эти файлы содержат одну единственную строку:

<html><body bgcolor="#FFFFFF"></body></html>

С помощью этих файлов будет отображаться пустая страница.
У нас получился простейший компонент.

Архив исходных файлов для этого урока можно скачать по этой ссылке:
http://joomla-master.com/com_hello_2.zip


Предыдущие уроки по Основах программирования для Joomla 1.5:

Введение

Урок 1. Основы функционирования Joomla 1.5

Рассылка временно отключена.