Смекни!
smekni.com

Побудова компонент та модулів для системи управління контентом Joomla (стр. 3 из 6)

· «PentaChat» - хоча компонент і входить в стандартний набір, багатьом користувачам він здається марним. Основною функцією є організація відео-чату між користувачами сайту, що мають веб-камери.

· «Банери» - компонент дозволяє проводити рекламні кампанії на сторінках сайту.Придатний для показу графічних рекламних оголошень, що ведуть на певні внутрішні сторінки. Веде підрахунок показів і переходів по банеру.

· «Голосування» - компонент реалізує можливість проведення електронного опитування користувачів та відвідувачів сайту. При необхідності, дозволяє обмежити доступ до голосування тільки для зареєстрованих користувачів. У собі має гнучку систему налаштування голосування і показу результатів.

· «Контакти» - компонент створений для організації структурованого списку контактних осіб та виведення цього списку на сайт. Не дуже зручний, відсутністю гнучких шаблонів виведення інформації. Для адаптації необхідно змінити шаблон виведення, видаливши непотрібні елементи з коду.

· «Масове розсилання» - компонент використовується для розсиланняновинок і повідомлень користувачам, або якимось конкретним групам користувачів.

· «Посилання» - каталог посилань, що дає можливість організувати структурований каталог посилань на сторонні веб-ресурси.

Плагіни.

Плагіни - це низькорівневі розширення. Зазвичай плагіни активуються певною подією серверу. Плагін може перехоплювати вихідні дані «Joomla» і вносити до них зміни до відправлення в браузер користувача. Плагіни зазвичай використовуються для організації різних візуальних редакторів для «Joomla». У базі даних всі статті зберігаються у форматі HTML.Joomla виводить їх з бази даних, плагін редактору перехоплює цей результат висновку й конвертує у власне візуальне подання. Ми редагуємо текст статті, використовуючи це візуальне подання. Коли ми клацаємо на кнопці Зберегти, візуальне подання статті конвертується в HTML-код і зберігається в базі даних «Joomla».


2.9 Побудова власних компонент і модулів

Припустимо, що ми повинні вирішити деяке завдання за допомогою Joomla,але не можемо знайти готову компоненту, що підходить для цього. Наприклад, ми - автомобільний дилер, і потребуємо списку використовуваних вантажівок на веб - сайті, яким можемо управляти адміністративними засобами Joomla. Для цього можна просто розширити функціональність Joomlaновими компонентами, модулями. Те, що на перший погляд здається досить важким, насправді є доступним навіть тим, хто володіє лише початковими знаннями РНР.

Концепція «модель – вид – контролер »

В Joomla1.5 представлена концепція (шаблон проектування) для програмування розширень, яка називається "модель - вид - контролер" (Model-View-Controller – MVC). Даний підхід застосовується в сучасній розробціпрограмного забезпечення, щоб внести деякий порядок в ці речі.

При вирішенні програмних завдань майже завжди необхідні наступні тр компоненти:

– модель;

– вид;

– контролер.

Звідси виникає необхідність в стандартизації цих трьох компонентів.

Оскільки програмісти відчувають «алергію» до подібних стандарттів, концепціяповинна нести в собі реальну вигоду. Уважно розглянемо кожен з цих компонентів.

Модель

Модель містить подання інформації. Неважливо, звідки надходять дані. Модель не знає нічого про висновок даних і не має уявлення про те, як ці дані змінюються.

Вид

Вид відображає дані з моделі. Між моделлю й представленням повинен бути зв'язок, щоб було що відображати.

Контролер

Контролер управляє всім у цілому, тобто реагує на введення користувача й інші події, адмініструє моделі й представлення, а також обробляє нашу інформацію для поданя.

MVC - це різновид системи для програмного забезпечення. MVC дозволяє створювати програмний дизайн, що спрощує проведення подальших змін і дозволяє багаторазово використовувати код.

2.10 Приклад компоненти 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-подібних систем, тобто це буде / або &bsol; 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"?>

<!DOCTYPEinstallSYSTEM"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>