Разрботка расширений для CMS Joomla
Шрифт:
Глобальный объект JApplication позволяет работать с очередью сообщений, осуществлять перенаправление браузера, получать параметры конфигурации сайта, определять тип запущенного приложения Joomla.
Панели инструментов в бэкенде можно создавать с помощью класса JToolBarHelper, методы которого генерируют HTML-код для построения кнопок. Для отображения кнопок, которые часто используются в компонентах, существуют готовые методы этого класса. Можно также создать собственную кнопку.
Вопросы
Опишите
Что такое фронтенд и бэкенд?
Какие константы предопределены в 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 это обратные апострофы (``) для названий и обычные апострофы ('') для значений.
Рассмотрим пример использования этих методов:
$query = 'SELECT * FROM '.$db->nameQuote('#__users').' WHERE '.$db->nameQuote('username').'='.$db->Quote('admin');
Для базы данных MySQL с префиксом таблиц jos_ переменная $query примет следующее значение:
SELECT * FROM `jos_users` WHERE `username`='admin';
Задание запроса
Чтобы задать SQL-запрос для последующего выполнения, используется метод:
JDatabase setQuery(string $query, string $offset=0, string $limit=0)