Последовательность работы (выполнения) компонентов Joomla

Точка входа в Joomla! компонент подобна у большинства компонентов. Для этого примера мы будем использовать один из компонентов ядра Joomla – Web Links (Ссылки на сайты). Первый файл, который будет выполнен во front-end: …/components/com_weblinks/weblinks.php.

Сначала мы видим проверку безопасности, предназначенную для уверенности, что никто не сможет вызвать эту страницу непосредственно. Это стандарт, который должен использоваться во всех ваших php-файлах (хотя есть несколько исключений):

// no direct access
defined('_JEXEC') or die('Restricted access');

Затем мы подгружаем файл controller.php, который находится в той же директории:

// Require the base controller
require_once (JPATH_COMPONENT.DS.'controller.php');

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

// Require specific controller if requested
if($controller = JRequest::getWord('controller')) {
	$path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
	if (file_exists($path)) {
		require_once $path;
	} else {
		$controller = '';
	}
}

Теперь мы создаем экземпляр класса нашего контроллера, используя имя, которое определили выше:

// Create the controller
$classname = 'WeblinksController'.ucfirst($controller);
$controller = new $classname( );

И выполняем задачу, которую запросили в параметре строки запроса:

// Perform the Request task
$controller->execute(JRequest::getCmd('task'));

Как только задача выполнена, производим редирект, если он требуется:

// Redirect if set by the controller
$controller->redirect();

Далее открываем класс контроллера.

Класс контроллера (Controller Class)

Общий (характерный) контроллер для компонента ссылок находится здесь: …/components/com_weblinks/controller.php.
Весь этот класс определяет метод display, который является используемым по умолчанию, если пользователь не определяет другую задачу (task).
controller.php

В этом методе мы устанавливаем вид (представление) по умолчанию: показ категорий, если другой вид не был передан как параметр строки запроса. Если требуемый вид — weblink, мы увеличиваем значение счетчика просмотра ссылки. Затем мы устанавливаем значение переменной вида и вызываем метод diplay нашего родительского класса JController.
Стоит обратить отдельное внимание на вызов метода getModel. Он загружает необходимую модель для компонента. В рассматриваемом примере, этот метод загрузит модель weblink, находущуюся здесь: …/components/com_weblinks/models/weblink.php.
Здесь условимся, что мы не запрашивали определенное представление, и поэтому наш вид будет установлен в categories.
Затем, мы открываем класс представления.

Класс представления (вида) (View Class)

Так как мы предполагаем, что хотим представление категорий, это — следующий файл, который будет выполнен: …/components/com_weblinks/views/categories/view.html.php
view.html.php

И снова, это — очень простой класс с одним методом display. БОльшая часть логики здесь является специфической для компонента ссылок, но если присмотреться можно найти функциональность используемую в большинстве классов представлений компонентов. В конце метода display этот класс вызывает родительский (JView) метод display, передавая название шаблона для отображения. Если название шаблона отображения не передается, используется шаблон «default».
И в последних, мы открываем класс шаблона.

Класс шаблона (Template Class)

Условимся что определенное имя шаблона не было передано, таким образом будет использован шаблон по умпочанию «default». В этом случае, следующий файл, который будет рассмотрен: …/components/com_weblinks/views/categories/tmpl/default.php
default.php

Большая часть логики здесь специфична для выполняемого компонента. Также по коду видно, что в этом файле весь HTML, смешан с PHP – таковы его особенность о предназначение.

Другие файлы, использующиеся в компонентах

Несколько из других типов файла Вы могли бы найти в компонентах:

  • Helpers — в компонентах зачастую используется файл helper.php или каталог helpers со многими файлами. Эти файлы обычно содержат только общие функциональные возможности для компонента.
  • Assets — это, кажется, всеобъемлющая папка для других файлов, включаемых в компонент.
  • router.php — этот файл используется, при включенной настройке SEF URL, для трансляции URL в обоих направлениях (в человеко-понятный с псевдонимами и в системный вид Joomla с параметрами).
  • xml-файлы — они обычно определяют параметры и другую информацию о компоненте, и его обозрение. Они используются, например, при создании пунктов меню компонента.
  • index.html — хорошая практика иметь пустой index.html файл во всех ваших каталогах. Это такая пассивная мера безопасности.
  • css/images/js — папки, которые содержат различные файлы для внедрения дизайна и функциональности на стороне клиента (в браузере).

Комментариев: 6

  • 14.08.2010 Вася:

    Спасибо, то что надо получилось сделать.

    а как в роуте еще бы task добавить ?

  • 14.08.2010 Кирилл:

    Что-то я вопрос не понял, можешь уточнить?

  • 14.08.2010 Вася:

    сам разобрался я

    function componentnameBuildRoute(&$query) {

    $segments = array();

    if( isset($query['controller']) ) { $segments[] = $query['controller']; unset($query['controller']); }

    if( isset($query['view']) ) { $segments[] = $query['view']; unset($query['view']); }

    if( isset($query['id']) ) { $segments[] = $query['id']; unset($query['id']); }

    if( isset($query['task']) ) { $segments[] = $query['task']; unset($query['task']); }

    return $segments;

    }

    function componentnameParseRoute($segments) {

    $vars = array();

    $vars['controller'] = $segments[0];

    $vars['view'] = $segments[1];

    $vars['id'] = $segments[2];

    $vars['task'] = $segments[3];

    return $vars ;

    }

    вот что имел ввиду

    спасибо

  • 14.08.2010 Кирилл:

    Ответное спасибо за дельную добавку к заметке :)

  • 28.09.2010 Дмитрий:

    Добрый день, Скажите пожалуйста , а не кто не пробовал к ссылке добавлять что то типа &username= «логин пользователя вошедшего в joomla».

  • 25.02.2012 Сергей:

    Реально челу который разобрался (автору) и рассказал — респект и уважуха, сам не осилил дорыть до конца. Вот она, MVC в исполнении Joomla. Стало все на свои места. Страница в закладки, буду перечитывать еще :) . Точка входа это отжиг, знал, верней догадывался, подозревал, смотрел и не понимал. Конкретно нигде не видел доков об этом (или было лень переводить).


Добавление комментария:

 css.php