Приклад компоненти helloworld

Усі компоненти діляться на компоненти інтерфейсної частини й компоненти адміністративноі частини. Компоненти інтерфейсноі частини відображаються на веб-сайті, а компоненти адміністративної частини розробляються для адміністративного розділу - в основному для керування компонентами інтерфейсної частини. З погляду відвідувача сайту, ми можемо дізнатись компоненту способом запиту сторінки 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 завантажити й інсталювати пакет звичайним образом.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: