Недавно встретился с еще одной проблемой Joomla 3.x. Наверное, разработчики не углядели, либо я не нашел нужной галочки.
Нет возможности отсортировать и выводить материалы категории списком в последовательности: сначала самые новые статьи и далее к самым старым.
Джумла уперлась и выдает материалы категории в порядке: от старых статей к новым.
Например, «Блог категории» имеет регулируемый параметр «Порядок материалов» в настройках пункта меню: «Меню» - пункт меню – «Дополнительные параметры» - «Параметры макета Блога».
Как видно на изображении, порядок можно задать разными способами:
- по дате;
- по заголовку;
- по автору и т.п.
А вот, «Список категории» на такую настройку вообще не реагирует.
Пришлось копать в шаблоне вывода списка материалов.
Его относительный путь: \components\com_content\views\categories\tmpl\default_items.php
И что мы видим? В файле шаблона вывода компонента имеется обращение к базе данных! Хотя используется модель MVC. Неужели, нельзя было этот запрос осуществить в файле модели стандартного компонента Джумлы?
Хорошо, допустим здесь проблема. Как будем решать?
Со строчки 55 по 63 строчку происходит обращение к базе данных MySQL. В переменную $query записывается весь список материалов, которые относятся к определенной категории, причем порядок статей наследуется из самой базы данных. Самые свежие статьи оказываются в самом конце таблицы _content
Далее этот список материалов конвертируется в обычный массив $res с помощью метода loadObjectList().
Следующий шаг – пробегаемся по массиву $res с помощью цикла foreach и записываем каждое значение материала в отдельные пункты списка <ul>.
С работой скрипта мы разобрались. Итак, как поменяем порядок материалов?
Всё очень просто. Главное, знать основные функции PHP4, PHP5.
После формирования массива $res, мы его перевернем с ног на голову с помощью функции array_reverse();
Вот и получаем конечный код:
$db =& JFactory::getDBO();
$query = $db->getQuery(true);
//echo $item->id;
$query = 'SELECT * FROM `#__content` WHERE `catid`='.$item->id.' AND `state`>0';
$db->setQuery($query);
$res= $db->loadObjectList();
$res= array_reverse($res);
foreach ($res as $concert) { echo '<li>';
После сохранения изменений, порядок материалов моментально поменялся в списке категории.
