Лабораторная работа №8
Разработка компонент для CMS Joomla.
Разработка простого компонента для пользовательской части
Цель работы: разработать для CMS Joomla компонент пользовательской части для просмотра информации из базы данных.
Краткие теоретические сведения:
Пример компонента helloworld
Все компоненты делятся на компоненты интерфейсной части и компоненты административной части. Компоненты интерфейсной части отображаются на веб-сайте, а компоненты административной части разрабатываются для административного раздела - в основном для управления компонентами интерфейсной части. С точки зрения посетителя сайта, можно узнать компонент по способу запроса страницы Joomla.
Так, например, URL - адрес http://localhost/Joomla150/index.php?option=com_contact вызывает компонент com_contact интерфейсной части.
Если просмотреть в базе данных, то можно увидеть множество компонентов в подкаталоге [Путь_к_Joomla]/components, и среди них - компонент com_contact.
В зависимости от сложности компонентов, в этом каталоге появляются дополнительные подкаталоги для модели, представления и контроллера.
Домашний каталог helloworld
Каждый компонент располагается в собственном каталоге. Joomla предлагает следующую последовательность обнаружения компонента.
1 Joomla интерпретирует сгенерированные значения в URL: /index.php?option=com_helloworld.
2 Выполняет поиск таблицы для компоненты com_helloworld.
3 Ищет каталог com_helloworld.
4 В этом каталоге ищет файл helloworld.php.
5 Интерпретирует этот файл.
Для правильной интерпретации необходимо несколько файлов.
- helloworld.php — точка входа в ваш компонент.
- controller.php — контроллер.
- views/helloworld/view.html.php — представление, передающее данные в шаблон.
- views/helloworld/tmpl/default.php — файл стандартного шаблона, который будет переписан корректным шаблоном или использован как есть.
- helloworld.xml —XML-файл, который объясняет содержимое пакета контроллеру, сообщает ему, куда инсталлировать его, и кто за него отвечает.
После создания и упаковки компонента его необходимо инсталлировать как пакет компонента com_hello.zip и установить пункт меню. Таким образом, вы немедленно размещаете все файлы в нужные каталоги и можете легко исследовать исходный код.
Точка входа(componenst/com_hello/hello.php)
Это первый файл, который будет вызван, когда вы указываете URL http://localhost/joomlal50/index.php?option=com_hello&view=hello или щелкаете на соответствующем пункте меню. Результат будет определенно ожидаемым. Вы увидите текст "Hello World" в окне контента.
Исходный код этого файла представлен ниже.
/components/com_hello/hello.php:
<?php
// ограниченный доступ
defined('_JEXEC') or die('Restricted access');
// импортирование базового контроллера
require__once (JPATH_COMPONENT.DS.'controller.php');
// создание собственного контроллера
$classname = 'HelloController'.$controller;
$controller = new $classname( );
// проверка наличия параметров запроса
$controller->execute( JRequest::getVar('task'));
// перенаправление внутри контроллера
$controller->redirect();
?>
Первая строка осуществляет контроль безопасности, проверяя, был ли файл вызван Joomla или же непосредственно. Непосредственно вызванный сценарий немедленно останавливается функцией die():
require_once {JPATH_COMPONENT.DS.'controller.php');
После этого импортируется первый контроллер. Абсолютный путь к текущему, компоненту (components/com_hello) выглядит как JPATH_COMPONENT, a DS представляет собой разделитель каталогов операционной системы. В Windows он отличается от Unix-подобных систем, т.е. это будет / или \. Joomla устанавливает это значение автоматически.
$classname = 'HelloController'.$controller;
$controller = new $classname();
Теперь можно создать экземпляр читающего контроллера, и тем самым получить контроллер, который затем использовать. Если нужен всего один контроллер, как это часто бывает в интерфейсной части, можно воспользоваться следующим оператором:
$controller=newHelloController();
Scontroller->execute( JRequest::getVar('task'));
Операторы для компонентов устанавливается в URL в следующей форме:
index.php?option=com_hello&task=task
(где task — одно из значений save, edit, new...).
Следующая строка используется для проверки, есть ли что-то для чтения:
$controller->redirect();
При этих условиях контроллер перенаправляет запрос на другой сайт, например, если что-то должно сохраниться.
Контроллер
(/components/com_hello/controller.php)
Поскольку компонент действительно прост, перед контроллером теперь стоит задача отобразить что-нибудь. Нам не нужна модель данных, а достаточно одного метода display.
/components/com_hellо/controller.php:
<?php
jimport('joomla.application.component.controller');
class HelloController extends JController
{
function display()
{
parent::display();
}
}
?>
Вызов метода display() задает имя и компоновку представления. Наш компонент распознает только стандартную компоновку.
Представление
(/components/cam_hello/views/hello/views.html.php)
Здесь представление уже имеется - представление по умолчанию. /components/com_hello/views/hello/views.html.php:
<?php
jimport( 'joomla.application.component.view');
class HelloViewHello extends JView
{
function display ($tpl = null)
{
$greeting = "Hello World!";
$this->assignRef( 'greeting1, $greeting);
parent::display ($tpl);
}
}
?>
Представление обычно содержит данные (из модели), подготавливает их и посылает шаблону:
$greeting = "Hello World!";
$this->assignRef( 'greeting', $greeting );
parent::display($tpl);
Из-за присваиваний переменных модель здесь избыточна. Переменная $greeting, однако, могла бы содержать результат запроса к базе данных. Переменная передается шаблону методом assignRef:
parent::display($tpl);
Это вызывает появление шаблона.
Шаблон
(/components/com_hello/views/hello/tmpl/default.php)
Здесь применяется шаблон по умолчанию. Он всегда называется default.php и выглядит в своем простейшем виде, как показано в следующем листинге.
/components/com_hello/views/hello/tmpl/default.php:
defined('_JEXEC) or die('Restricted access'); ?>
<h1><?php echo $this->greeting; ?></h1>
Инсталляция
Все файлы теперь упакованы в ZIP-пакет и могут быть установлены инсталлятором Joomla. Файлы интерфейсной части из /components/com_hello сохраняются в каталоге site, а файлы административной области из /com_hello/administrator/components — в каталоге admin. Все файлы описываются дополнительной информацией в hello.xml.
hello.xml:
<?xml version="l.0" enooding="utf-8"?>
<!DOCTYPE install SYSTEM "http://dev.joomla.Org/xml/l.5/component-install.dtd">
<install type="component" version="l.5.0">
<name>Hello</name>
<creationDate>November</creationDate>
<author>Nobody</author>
<authorEmail>nobody@example.org</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<version>Component Version String</version>
<description>description of the component . . . </description>
<!— Site Main File Copy Section —>
<files folder="site">
<filename>index.html</filename>
<filename>hello.php</filename>
<filename>controller.php</filename>
<filename>views/index.html</filename>
<filename>views/hello/index.html</filename>
<filename>views/hello/view.html.php</filename>
<filename>views/hello/tmpl/index.html</filename>
<filename>views/hello/tmpl/default.php</filename>
</files>
<administration>
<!— Раздел меню администрирования —>
<menu>Hello World!</menu>
<!— Раздел копии главных файлов администрирования —>
<files folder="admin">
<!— Раздел копии главных файлов сайта —>
<filename>index.html</filename>
<filename>admin.hello.php</filename>
</files>
</administration>
</install>
При упаковке в ZIP-пакет необходимо сохранить структуру. Теперь можно позволить инсталлятору Joomla загрузить и инсталлировать пакет обычным образом.
Программирование для Joomla 1.5 легко, поддается расширению и предельно ясно. На первый взгляд все эти файлы казались несколько путающими, но результат прост. В каждом файле присутствует очень немного исходного кода, и потому получается гораздо лучший обзор. Именно на это и нацелена концепция MVC. И если нужно иметь специальный сложный шаблон, просто перепишите представление в вашем самодельном шаблоне.
На рисунках 11.1, 11.2 показана установка созданного расширения.
Рисунок 11.1 – Установка модуля
Рисунок 11.2 – Сообщение об успешной установке
На рисунках 11.3 и 11.4 показано добавление ссылки на расширение в главное меню сайта.
Рисунок 11.3 – Ссылка на расширение в списке компонентов
Рисунок 11.4 – Добавление ссылки на компонент в главное меню сайта
На рисунке 11.5 показана работа созданного компонента на главной странице сайта.
Рисунок 11.5 – Отображение компонента на главной странице
Задание к работе:
Ознакомиться с теоретическим материалом.
Внести изменения в шаблон компонента CMS Joomla.
Подключить компонент через панель управления.
Включить компонент через «Менеджер модулей».
Изучить работу компонента на главной странице сайта.
Оформить отчет согласно требованиям.
Отчет должен содержать:
Название и цель работы.
Ход работы с детальным описанием выполненных действий с рисунками.
Экранные формы браузера с загруженными страницами.
Выводы о проделанной работе.
Вопросы для подготовки к защите работы:
1. Каким образом создаются модули и расширения в CMS Joomla?
2. Какая структура модулей и расширений используется в CMS Joomla?
3. Какой подход в программировании используется при создании модулей и расширений в CMS Joomla?
4. Чем отличается модуль от расширения в CMS Joomla?
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.