Усі компоненти діляться на компоненти інтерфейсної частини й компоненти адміністративноі частини. Компоненти інтерфейсноі частини відображаються на веб-сайті, а компоненти адміністративної частини розробляються для адміністративного розділу - в основному для керування компонентами інтерфейсної частини. З погляду відвідувача сайту, ми можемо дізнатись компоненту способом запиту сторінки Joomla.
Так, наприклад, URL-адрес http://localhost/Joomla/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-файл, який пояснює вміст пакету контролера, повідомляє йому, куди інсталювати його, і хто за нього відповідає.
Точка входу(componenet/com_hello/hello.php)
Це перший файл, що буде викликаний, коли ми вказуємо URL http://localhost/joomla/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 завантажити й інсталювати пакет звичайним образом.