Можно попробовать вот так . Чтобы не портить оригинальные файлы, можно создать для нужных типов меню отдельный макет в своем шаблоне . Ну или с дефолтным шаблоном вывода меню эксперементировать, но обязательно в своем шаблоне. Как описано в постах выше .
Если работать с дефолтным, то будут затронуты все модули меню. Если это не актуально, то работайте с дефолтным.
В начале файла
default.php вставляем код :
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('`id`, `parent_id`, `lft`, `rgt`');
$query->from('#__categories');
$query->where('`extension` = "com_content" AND `published` = 1 ');
$db->setQuery($query);
$cat_tmp = $db->loadAssocList() ;
foreach($cat_tmp as $v){
$cat[$v['id']]['id'] = $v['id'];
$cat[$v['id']]['parent_id'] = $v['parent_id'];
$cat[$v['id']]['lft'] = $v['lft'];
$cat[$v['id']]['rgt'] = $v['rgt'];
}
Потом в файле
default_component.php , опять же в начале, добавляем код :
$db = JFactory::getDbo();
$count = '';
if($item->query['view'] == 'category'){
$query = $db->getQuery(TRUE);
$query->select('`id`, `title` ');
$query->from('#__categories as c');
$query->where('`published` = 1 and `extension` = "com_content" and `lft` BETWEEN '.$cat[$item->query['id']]['lft'].' AND '.$cat[$item->query['id']]['rgt'].' ');
$db->setQuery($query);
$res = $db->loadAssocList(); //jbdump($res);
$in_value = '';
$count_res = count($res);
$i = 1;
foreach($res as $v){
if($i!=$count_res){
$in_value .= $v['id'].',';
}
else{
$in_value .= $v['id'].'';
}
$i++;
}
$where = "`state` = '1' AND `catid` IN(".$in_value.")" ;
$query = $db->getQuery(true);
$query->select('COUNT(`id`)');
$query->from('#__content');
$query->where( $where );
$db->setQuery($query);
$count = ' ( '.$db->loadResult().' )';
}
Ну и естесственно потом выводим переменную $count в нужном месте .
Это будет работать . Но добавит по два запроса в базу данных на каждый пункт меню, в котором выводится количество материалов . Хотя запросы простые и не должны особо затормозить сайт
