Структура базы данных Joomla оставалась относительно постоянной, с тех пор как Joomla 1.0 была запущена в 2005. И вот после шести лет пришло время реорганизовать структуру, устранить мночисленные проблемы сдерживающие развитие Joomla, и подготовить основу на следующие пять или шесть лет разработки.
Использование нового JDatabaseQuery класса в Joomla 1.6
Для лучшей в будущем поддержки других баз данных, таких как MongoDB, MSSQL, и др., Joomla 1.6 предоставляет новый класс конструктора запросов. Этот класс позволяет Вам создавать запросы в порядке, которые имеют смысл для разработчиков, а не в строгом формате SQL. Ниже пример того, на что похож запрос в Joomla 1.5 и как это преобразовывается в Joomla 1.6. Используя класс запроса, Вы можете встроить много условных элементов в запросы программно аккуратным способом.
Построение SQL запроса в Joomla 1.5
$db= JFactory::getDbo(); $db->setQuery( 'SELECT *'. ' FROM #__articles'. ' WHERE state = '.(int)$published. ' AND catid = '.(int)$categoryId. ' ORDER BY created DESC' );
Альтернативный способ построения запроса в Joomla 1.6
Изменения в структуре базы данных Joomla 1.6 для установленных расширений
Одной из вещей, которая преследовала разработчиков Joomla в прошлом, является то, что метаинформация о расширениях была сохранена во множестве таблиц. Хотя большинство разработчиков знало о неудобной jos_components таблице, которая служила основным списком компонентов. Но для шаблонов и модулей, не было никакого основного списка установленных расширений, поэтому разработчикам раз за разом приходилось обращаться к сканированиям папок . Joomla 1.6 решает эту проблему, представляя jos_extensions таблицу. Эта таблица объединяет jos_components и jos_plugins таблицы, и добавляет метаинформацию обо всех других установленных типах расширений: модулях, шаблонах и плагинах.
Следующие примеры запросов Вы можете использовать на практике. Отметьте, что запросы используют новый класс JDatabaseQuery.
Изменения в структуре базы данных для пользователей и групп
В Joomla 1.6 предоставляются действительно новые средства управления доступом, это функция номер один, которую требовало сообщество Joomla для этой версии, из-за этого много изменений в схеме базы данных было произведено.
Были добавлены новые таблицы, которые управляют новой системой управления доступом, это - jos_assets, jos_users, jos_usergroups, jos_usergroup_map, jos_viewlevels.
Важное изменение в таблице jos_users, в отличии от Joomla 1.5, было удалено поле 'gid', потому как теперь пользователь может состоять более чем в одной группе.
Получаем группу пользователя в Joomla 1.5
$db= JFactory::getDbo(); $db->setQuery( 'SELECT g.value AS group_name'. ' FROM #__core_acl_groups AS g'. ' LEFT JOIN jos_core_acl_groups_aro_map AS grpMap ON grpMap.group_id = g.id'. ' LEFT JOIN jos_core_acl_aro AS aro ON aro.id = grpMap.aro_id'. ' WHERE aro.value = '.(int)$userId );
Получаем группу пользователя в Joomla 1.6
$db= JFactory::getDbo(); $query=$db->getQuery(true); $query->select('g.title AS group_name') ->from('#__usergroups AS g') ->leftJoin('jos_user_usergroup_map AS map ON map.group_id = g.id') ->where('map.user_id = '.(int)$userId) $db->setQuery($query);