Краткие итоги
Фреймворк Joomla состоит из трех уровней: уровень фреймворка, уровень приложения и уровень расширений.
Уровень фреймворка обеспечивает базовую функциональность Joomla с помощью набора библиотек и плагинов и собственно фреймворка Joomla.
Уровень приложения состоит из приложений, которые расширяют абстрактный класс JApplication.
Уровень расширений состоит из таких расширений фреймворка Joomla и приложений, как компоненты, модули, плагины и т.д.
Joomla делится на фронтенд - часть сайта, доступная пользователю, и бэкенд - систему администрирования сайта. Большинство компонентов для Joomla также делятся на фронтенд и бэкенд, и их код соответственно распределяется по двум папкам.
В Joomla определен ряд констант, хранящих значения путей, а также константа _JEXEC, позволяющая проверить, был ли скрипт вызван из Joomla, и DS - разделитель директорий.
Для создания мультиязыкового сайта используются языковые файлы, хранящие пары "ключ-значение", где ключ - это эквивалент какого-то текста, а значение - перевод этого текста на какой-либо язык.
Статический класс JFactory реализует паттерн "фабрика" и позволяет получить доступ к глобальным объектам фреймворка.
Вместо непосредственного использования глобальных массивов $_GET, $_POST, $_REQUEST и др. удобнее применять класс JRequest. Его методы пропускают данные, введенные пользователем, через фильтр во избежание инъекций.
В Joomla существует очередь сообщений - массив строк, которые будут выведены на экран при следующей загрузке какой-либо страницы. Добавляя сообщение в очередь, мы можем указывать его тип - сообщение, предупреждение или ошибка.
Глобальный объект JApplication позволяет работать с очередью сообщений, осуществлять перенаправление браузера, получать параметры конфигурации сайта, определять тип запущенного приложения Joomla.
Панели инструментов в бэкенде можно создавать с помощью класса JToolBarHelper, методы которого генерируют HTML-код для построения кнопок. Для отображения кнопок, которые часто используются в компонентах, существуют готовые методы этого класса. Можно также создать собственную кнопку.
Вопросы
Опишите структуру фреймворка Joomla.
Что такое фронтенд и бэкенд?
Какие константы предопределены в Joomla?
Каким образом реализована поддержка мультиязыковых сайтов?
Для чего используется класс JFactory?
В чем преимущество использования методов класса JRequest?
Что такое очередь сообщений?
Для чего используется глобальный объект JApplication?
Каким образом создаются панели инструментов в бэкенде?
Упражнения
Адаптируйте код из раздела " Практика" для своего варианта (см. дополнительные материалы).
Работа с базой данных
Подробно рассмотрена работа с базой данных средствами Joomla. Рассмотрены понятия реального и символического префиксов, этапы выполнения запроса к базе данных и класс JTable.
Цель лекции:Изучить, как происходит работа с базой данных средствами Joomla.
Префикс таблиц базы данных
Префикс таблиц базы данных- это строка, которая присоединяется к названию каждой таблицы Joomla в базе данных. Префикс задается при установке Joomla. В старых версиях по умолчанию использовался префикс "jos_", однако это создавало потенциальную уязвимость сайта, т.к. хакеры знали название таблицы с паролями пользователей - "jos_users". Теперь префикс, предлагаемый при установке, генерируется случайным образом.
Использование префикса позволяет разместить в одной базе данных несколько установок Joomla.
Различают реальный и символический префиксы. Реальный префикс- это то конкретное сочетание символов, которое используется в названиях таблиц базы данных. Символический префикс- это сочетание "#__" (решетка и два знака подчеркивания), которое используется в запросах вместо реального префикса. При обработке запроса вместо символического префикса будет автоматически подставлен реальный. Например, при реальном префиксе "jos_" строка "#__mycomponent_mytable" превратится в "jos_mycomponent_mytable".
При разработке собственных расширений в SQL-запросах всегда указывается символический префикс, а не реальный, так как в других установках Joomla почти наверняка будут использоваться другие реальные префиксы.
Выполнение запроса к базе данных
Чтобы выполнить запрос к базе данных Joomla, необходимо осуществить пять операций:
Получение ссылки на объект JDatabase.
Формирование запроса.
Задание запроса.
Выполнение запроса.
При необходимости - загрузка результата.
Получение ссылки на объект JDatabase
JDatabase- абстрактный класс, предоставляющий доступ к соединению с базой данных. Это соединение создается при инициализации приложения Joomla, а в коде своего расширения мы можем получить ссылку на него с помощью метода getDbo() статического класса JFactory:
$db =& JFactory::getDbo();
Формирование SQL-запроса
В старых версиях Joomla запросы формулировались в виде строки:
$query = 'SELECT * FROM #__categories';
В Joomla 1.6 появился объект JDatabaseQuery, методы которого позволяют упростить создание сложных SQL-запросов. Названия этих методов практически совпадают с ключевыми словами языка SQL: select(), from(), where(), having(), join() и т.д. Использование объекта JDatabaseQuery иллюстрирует следующий пример:
$db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('id, name'); $query->from('#__users'); $query->order('name'); $query->where('username LIKE \'a%\''); $db->setQuery($query); echo $query->__toString();
В данном примере мы получаем из таблицы #__users отсортированный по алфавиту список id и имен пользователей, чьи логины начинаются на букву "a". Данный код выведет на экран следующий SQL-запрос:
SELECT id, name FROM #__users WHERE username LIKE 'a%' ORDER BY name
Как известно, употребляющиеся в запросе названия полей и таблиц рекомендуется заключать в ограничители, чтобы избежать совпадений с зарезервированными словами. Кроме того, строковые значения в запросах также берутся в кавычки. Методы nameQuote() и Quote() заключают, соответственно, названия и значения в правильные ограничители. Для MySQL это обратные апострофы (``) для названий и обычные апострофы ('') для значений.