Все про комп'ютери
 
Останні записи

  •  

    Створення Model-view-controller компоненту частина 1


    Введення

    Дане керівництво присвячене розробці компоненту в Joomla 1.5 з використанням технології framework і схеми MVC. Ви пройдете через весь процес його створення. У результаті буде розроблений простою компонент Hello World! Він ускладнюватиметься в наступних частинах керівництва, щоб показати все потужність і гнучкість схеми MVC.

    Вимоги: Joomla 1.5 або вище.

    Введення в схему Model-view-controller

    Не дивлячись на те, що ідея компоненту може показатися дуже простій, код ускладнюватиметься шляхом додавання нових властивостей і розробкою призначеного для користувача інтерфейсу. Схема MVC може бути використана для такої організації коди, при якій відбувається відділення бізнес-логіки від представлення даних. Вся бізнес-логіка розміщена в одному місці, що дозволяє легко змінювати інтерфейс або спосіб взаємодії з користувачем без зміни самої бізнес-логіки. MVC спочатку був розроблений для того, щоб проводити введення, обробку інформації і отримання результату відповідно до логіки архітектури GUI. Це є основою схеми MVC в Joomla.

    Модель

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

    Представлення

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

    Контроллер

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

    Зв'язок MVC

    Малюнок справа ілюструє використання основних компонентів в Joomla. Окрім моделі, уявлення і контролера на малюнку зображені точка входу у вигляді маленького кухлик і шаблон. Ці п'ять компонентів дадуть вам можливість зрозуміти, як створюються MVC компоненти в Joomla.

    Перша частина керівництва сфокусирована на контроллері і уявленні (з використанням шаблону). На малюнку вони відмічені синім кольором. Друга частина додає модель, а третя частина розширює її функціональність. Вона відмічена зеленим кольором на малюнку. Майте зважаючи на, що ця схема застосовується тільки до призначеної для користувача частини сайту, хоча така ж схема застосовна і до адміністративної частини. Про адміністративну частину сайту мова піде, починаючи з четвертої частини цього керівництва. Обидві частини описано і конфігуровано в інсталяційному xml файлі.

    Реалізація MVC

    В Joomla модель MVC реалізована за допомогою трьох класів: Jmodel, Jview, Jcontroller.

    Створення компоненту

    На початку для нашого компоненту знадобитися все лише п'ять файлів:

    1 site/hello. php – це точка входу компоненту;2. site/controller. php – містить контролер;3. site/views/hello/view. html. php – цей файл отримує необхідні дані і поміщає їх в шаблон;4. site/views/hello/tmpl/default. php – шаблон;5. hello. xml – це xml файл, який показує Joomla як встановлювати наш компонент.

    Запам'ятаєте, що ім'я файлу точки входу має бути таке ж як і у компоненту. Наприклад, ви назвали компонент Very Intricate Name Component, під час установки (дивися нижче у файлі hello. xml) Joomla створить теку з ім'ям " com_veryintricatenamecomponent " і файл точки входу має бути названий veryintricatenamecomponent. php, а інакше компонент працювати не буде. Звернете увагу, що треба уникати використання в назві компонентів і файлів спеціальних символів.

    Створення точки входу

    Доступ до компонентів в Joomla завжди відбувається тільки через одну точку входу: index. php для сайту або administrator/index. php для адміністративної частини. Потім додаток завантажить потрібний компонент, значення якого визначене в параметрі option в URL або передане методом POST. Для нашого компоненту URL буде:

    index. php? option=com_helloview=hello

    Це посилання завантажить наш основний файл, який є точкою входу для нашого компоненту: components/com_hello/hello. php. Код цього файлу стандартний для багатьох компонентів.

    site/hello. php:

    php/ @package Joomla. Tutorials @subpackage Components components/com_hello/hello. php @link docs. joomla. org/developing_a_model-view-controller_component_-_part_1 @license Gnu/gpl/// No direct accessdefined( '_jexec' ) or die( 'Restricted access' );// Require the base controllerrequire_once( Jpath_component. DS.'controller. php' );// Require specific controller if requestedif($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 = 'Hellocontroller'.$controller;$controller = new $classname( );// Perform the Request task$controller-execute( Jrequest: getvar( 'task' ));// Redirect if set by the controller$controller-redirect();

    Перша інструкція – це перевірка безпеки.

    Jpath_component – це абсолютний шлях до компоненту, в нашому випадку components/com_hello. Можна також використовувати Jpath_component_site – шлях до компоненту сайту, Jpath_component_administrator – шлях до адміністративної частини. DS є автоматичним вибором слеша: " \ " або " / " . Після завантаження основного контролера ми визначаємо, чи є необхідність завантажувати якийсь додатковий контролер. У нас буде тільки один контролер. Jrequest: getvar() знаходить в URL або в POST даних змінну, передану йому як параметр. Оскільки наш URL - index. php? option=com_hellocontroller=controller_name, то наш контролер ми можемо знайти, використовуючи echo Jrequest: getvar('controller'). Тепер у нас є наш основний контролер 'Hellocontroller' у файлі com_hello/controller. php і якщо необхідне додатковий 'Hellocontrollercontroller1' в com_hello/controllers/controller1. php. Стандартна схема найменування контролера: {Назва компоненту}{Controller}{Назва контролера}

    Після того, як контроллер створений, ми даємо йому команду виконати завдання, яке визначене в URL: index. php? option=com_hellotask=sometask. Якщо завдання не встановлене, то за умовчанням буде display. Коли використовується завдання display змінна view вкаже, що має бути відображене. Іншими завданнями є save, edit, new і тд. Зазвичай, коли виконується завдання save контролер вирішує, що треба перенаправити сторінку. Остання інструкція здійснює перенаправлення. Головна точка входу(hello. php) по суті передає контроль контролерові, який обробляє завдання, визначені в запиті. Відмітьте, що ми не використовуємо закриваючий тег ?. Ми робимо це для того, щоб у нас не було ніякого небажаного порожнього простору в коді. Така практика за умовчанням використовується, починаючи з Joomla 1.5 для файлів, що містять тільки php код.

    Створення контроллера

    Наш компонент виконує тільки одну завдання – вітає мир. Тому контроллер буде дуже простій. Нам не потрібна ніяка маніпуляція даними. Все що треба вже є в завантаженому уявленні. Велика частина необхідних функціональних можливостей вбудована в клас Jcontroller, таким чином, все що ми повинні зробити це викликати метод Jcontroller: display(). Код нашого контролера(site/controller. php)

    php/ @package Joomla. Tutorials @subpackage Components @link docs. joomla. org/developing_a_model-view-controller_component_-_part_1 @license Gnu/gpl/// No direct accessdefined( '_jexec' ) or die( 'Restricted access' ); jimport('joomla. application. component. controller');/ Hello World Component Controller @package Joomla. Tutorials @subpackage Components/class Hellocontroller extends Jcontroller{/ Method to display the view @access public/function display(){parent: display(); }}

    Конструктор Jcontroller завжди реєструватиме завдання display() поки не буде визначено що-небудь інше. Це завдання встановлюватиметься за умовчанням. Коли ви створюєте пункт меню для вашого компоненту, менеджер меню дозволить адміністраторові вибрати уявлення, яке б відображало або конкретний дані, або їх схему. Звичайне уявлення посилається на певний набір даних, наприклад список машин, список подій, конкретна машина, конкретна подія. Схема це спосіб, за допомогою якого організовано уявлення. У нашому компоненті буде одне уявлення і одна схема (за умовчанням).

    Створення представлення

    Завдання уявлення дуже просте: воно отримує дані і поміщає їх в шаблон. Дані поміщені в шаблон використовуються методом Jview: assignref.

    Наше уявлення знаходитися у файлі: site/views/hello/view. html. php. Ось його код:

    php/ @package Joomla. Tutorials @subpackage Components @link docs. joomla. org/developing_a_model-view-controller_component_-_part_1 @license Gnu/gpl/// no direct accessdefined( '_jexec' ) or die( 'Restricted access' ); jimport( 'joomla. application. component. view');/ HTML View class for the Helloworld Component @package Helloworld/class Helloviewhello extends Jview{function display($tpl = null){$greeting = Hello World!;$this-assignRef( 'greeting' $greeting ); parent: display($tpl); }}

    Створення шаблону

    Шаблони Joomla це PHP файли, які використовуються, щоб розмістити дані отримані від уявлення в певній манері. Змінні, визначені методом Jview: assignref можуть бути доступні в шаблоні при використанні конструкції $this-{ім'я властивості} (дивися код шаблону в прикладі).

    Наш шаблон дуже простий: він всього лише відображає вітання, яке він отримав від уявлення. Файл шаблону: site/views/hello/tmpl/default. php

    php// No direct accessdefined('_jexec') or die('Restricted access'); ? h1? php echo $this-greeting; ?/h1

    Створення файлу hello. xml

    Є можливість встановити компонент в ручну, копіюючи файли через FTP і створюючи таблиці бази даних. Проте ж легко створити пакетний файл, який дозволить Joomla зробити все за нас. Цей пакетний файл містить різну інформацию:1. опис деталей компоненту (наприклад, найменування), необов'язково – опис, інформація про права і ліцензію;2. список файлів, які необхідно скопіювати;3. необов'язково, PHP файл, який виконує додаткові операції по інсталяції і деінсталяції компоненту;4. необов'язково, SQL файл, що містить запити, які мають бути виконані при інсталяції/деінсталяції.

    Формат файлу hello. xml:

    xml version=1.0 encoding=utf-8? install type=component version=1.5.0namehello/name!-- The following elements are optional and free of formatting constraints --creationDate2007-02-22/creationDateauthorJohn Doe/authorauthoremailjohn. doe@example. org/authoremailauthorurlexample. org/authorurlcopyrightcopyright Info/copyrightlicenselicense Info/license!-- The version string is recorded in the components table --version1.01/version!-- The description is optional and defaults to the name --descriptionDescription of the component./description!-- Site Main File Copy Section --!-- Note the folder attribute: This attribute describes the folderto сміттю FROM in the package to install therefore files copiedin this section are copied from /site/ in the package --files folder=site

    BJC-1000 | Cowon W2 | Apple iPad | Picasa | RAID 5