Анотація: Коротко описана архітектура Joomla. Розглянуто зумовлені константи, мовні файли, реалізація патерну "фабрика", робота з HTTP-запитом, об'єктом JApplication, створення панелей інструментів.
Мета лекції: Вивчити базові відомості про архітектуру Joomla. Отримати уявлення про функціонування такого типу розширень як компоненти.
Передмова
Найважливішим джерелом відомостей про програмування під Joomla є офіційна документація до цієї системи [5]. Однак на момент складання даного курсу ця документація є досить неповної, особливо з урахуванням того, що ряд статей відноситься до старої версії Joomla (1.5). Код розширень, написаних під Joomla 1.5, дещо відрізняється від коду, написаного під недавно вийшли версії Joomla 1.6, 1.7 і 2.5.
Керівництво по розробці компонента на офіційному сайті Joomla починається відразу з написання коду згідно з архітектурою MVC (Модель - Вид - Подання). Такий підхід навряд чи зручний, так як значно легше для студента було б почати з вивчення основ програмування під Joomla, з вивчення основних класів фреймворка цієї системи і лише потім переходити на архітектуру MVC. Більш зручний для навчання підхід застосовується в книзі [3]. Вона будується від простого до складного: спочатку розглядається розробка простого компонента без використання класів, що реалізують MVC, а потім відбувається перехід на цю архітектуру. Тому в практичній частині даного курсу ми будемо слідувати порядку викладу цієї книги. Крім того, велика частина програмного коду, що становить практичну частину даного курсу, заснована на лістингах з цієї книги. Однак вихідні коди, взяті з книги [3], написані під Joomla 1.5 і застаріли. Для цього курсу вони були змінені для використання в Joomla 1.7 і перенесені на іншу предметну область. Перехід на Joomla 1.7 зажадав расмотрения в практичній частині курсу таких відсутніх в [3] питань, як створення пунктів меню в панелі управління, використання мовних файлів. Більшу увагу приділено роботі з навігаційною ланцюжком сайту.
Написання теоретичної частини лекцій ускладнювалося пробілами в документації Joomla. Іноді опис параметрів будь-якого методу присутній в документації, але є абсолютно невірним. У ряді випадків при розгляді класів фреймворка цієї системи доводилося відкривати вихідний код її файлів, щоб розібратися, як працює той чи інший метод. Особливо часто цей підхід застосовувався при розгляді групи класів, керівників генерацією елементів HTML.
Відзначимо також книгу [2], яка теж розглядає програмування для старої версії Joomla.
Для системи управління контентом Joomla створені тисячі розширень. Проте, використовувати готове рішення не завжди доцільно. Стороннє розширення може бути надто дорогим або перевантажувати сервер непотрібними для конкретного завдання функціями. Для нестандартної задачі готового рішення може зовсім не знайтися.
Іноді досить скористатися одним з конструкторів контенту (CCK) для Joomla, що дозволяють створювати свої шаблони для матеріалів. Однак і CCK - не панацея, і можливо, що і він виявиться безсилий. В такому випадку виникає необхідність написати власне розширення.
Може трапитися, що готове рішення почне працювати некоректно і доведеться шукати в ньому помилку. Тоді, щоб розібратися в його коді, програмісту знадобиться знання принципів побудови розширень під Joomla.
архітектура Joomla
Фреймворк Joomla складається з трьох рівнів (рис. 1.1):
- рівень фреймворка;
- рівень застосування;
- рівень розширень.
Мал. 1.1. фреймворк Joomla
Рівень фреймворка забезпечує базову функціональність Joomla за допомогою набору бібліотек і плагінів і власне фреймворка Joomla:
- фреймворк Joomla (або "ядро") - набір класів, що забезпечують базову функціональність Joomla. Назви цих класів починаються з літери "J" і говорять самі за себе: JDatabase. JUser. JForm. JEditor і т.д .;
- бібліотеки потрібні для роботи фреймворка або сторонніх розширень;
- плагіни розширюють функціональність фреймворка.
Рівень додатки складається з додатків, які розширюють абстрактний клас JApplication. Додаток - глобальний об'єкт. використовується для обробки запитів.
В цей рівень входять наступні програми:
- JInstallation запускається при установці Joomla. Після завершення установки необхідно видалити директорію installation. яка як раз і містить цю програму. Надалі установка розширень виконується за допомогою програми JAdministrator;
- JAdministrator управляє всіма функціями для адміністрування Joomla;
- JSite відповідає за компоновку і відображення фронтенда;
- XML-RPC дозволяє адмініструвати сайт Joomla віддалено.
Рівень розширень складається з розширень фреймворка Joomla і додатків:
- компоненти - основний тип розширень Joomla. При кожному зверненні до Joomla відбувається виклик відповідного компонента. Наприклад, при відображенні будь-якої сторінки сайту відбувається виклик компонента com_content;
- модулі використовуються для відображення невеликих фрагментів контенту, зазвичай в лівій або правій колонці або верхньої або нижньої областях сторінки;
- плагіни дозволяють зареєструвати функції і класи для обробки будь-яких подій, викликаних Joomla, наприклад, пошук по сайту;
- мовні файли дозволяють уявити контент Joomla на декількох мовах;
- шаблони відповідають за зовнішній вигляд сайту.
Фронтенд і бекенд
Більшість компонентів для Joomla діляться на фронтенд і бекенд, і їх код розподіляється за двома папок, кожна з яких називається по схемі com_<имя компонента>. У кожній з цих папок повинен знаходитися файл. є точкою входу, і називається так само, як компонент. тобто <имя компонента>. php. Схематично це можна зобразити так:
зумовлені константи
В Joomla визначено ряд констант, що зберігають значення шляхів: JPATH_BASE - шлях до кореневої директорії поточного додатка; JPATH_ROOT - шлях до кореневої директорії сайту, JPATH_COMPONENT - шлях до директорії компонента, JPATH_COMPONENT_SITE - шлях до фронтенду компонента, JPATH_COMPONENT_ADMINISTRATOR - шлях до бекенд компонента і т.д. Повний їх список можна знайти в документації. Всі ці константи повертають значення абсолютних шляхів в файлової системі. Якщо вам необхідно отримати шлях для використання в URL. слід скористатися методом JURI :: base ().
У файлі index. php. розташованому в кореневій директорії Joomla. визначена константа _JEXEC. Більшість PHP-файлів, написаних під Joomla, починаються з виразу
Цей вираз здійснює перевірку, чи був файл. в якому воно записано, викликаний з Joomla. Таким шляхом забороняється доступ до файлу ззовні, щоб запобігти злому сайту.
Ще одна популярна константа Joomla - DS. роздільник директорій, прийнятий в конкретній операційній системі (наприклад, прямий або зворотний слеш).
мовні файли
Joomla дозволяє створити багатомовними сайт. задаючи для кожного користувача мову сайту і панелі управління. Дана можливість реалізована в такий спосіб: в кодах розширень при необхідності вивести на екран будь-якої заздалегідь відомий текст (наприклад, повідомлення про успішне виконання запиту користувача) замість цього тексту записується його еквівалент (ключ). Для кожної мови, які підтримуються в розширенням, створюються мовні файли. які зберігають перекази для всіх ключів, які зустрілися в кодах розширення. Наприклад, для ключа "COM_MYCOMPONENT_HELLO_WORLD" переклад на англійську мову може здаватися як "Hello, world!", На російську - "Здрастуй, світ!", На французький - "Bonjour le monde!" і т.д.
Мовні файли фронтенда зберігаються в папці / language /
Мовні файли бекенд зберігаються в папці / administrator / language /
Крім файлів .ini. для розширення повинен також бути створений файл * .sys.ini. в якому можуть зберігатися переклади повідомлень, що виводяться після установки розширення, переклади пунктів меню. створюються для компонента в панелі управління, переклади параметрів компонента і переклади написів, які виводяться в менеджері розширень. Наприклад, шлях до файлу .sys.ini компонента contact для російської мови виглядає так: /administrator/language/ru-RU/ru-RU.com_contact.sys.ini
Ключ - це рядок для перекладу, а значення - це переклад цього рядка на заданий мову. Ключ відділяється від значення знаком рівності: