Часто надо знать корневую категорию в которой находится пользователь, например для того, чтобы оформить модули в соответствии с цветовой гаммой раздела, ну и для чего-нибудь еще, придумайте сами.
Написал функцию, определяющую корневую категорию, пригодна для любого компонента, использующего таблицу категорий Joomla, для хранения своих категорий.
Функция получилась очень простая из-за того, что в категориях использованы nested sets, которые существенно облегчают процесс выборки как вверх так и вниз по дереву.
Тело функции:
function getRootCat($catid){
static $id;
if(empty($id)){
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('parent.id');
$query->from('#__categories as child');
$query->from('#__categories as parent');
$query->where('child.id = '.(int)$catid);
$query->where('parent.rgt >= child.rgt');
$query->where('parent.lft <= child.lft');
$query->where('parent.level = 1');
$db->setQuery($query);
$id = $db->loadResult();
}
return $id;
}
Входящий параметр один — ид текущей категории. Выход тоже один — ид корневой категории.