Недавно встретился с еще одной проблемой 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>';

После сохранения изменений, порядок материалов моментально поменялся в списке категории. 

 

Добавить комментарий

Защитный код
Обновить