Точка входа в 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 — папки, которые содержат различные файлы для внедрения дизайна и функциональности на стороне клиента (в браузере).