Недавно встретился с еще одной проблемой Joomla 3.x.  Наверное, разработчики не углядели, либо я не нашел нужной галочки.

Нет возможности отсортировать и выводить материалы категории списком в последовательности: сначала самые новые статьи и далее к самым старым.

 

Джумла уперлась и выдает материалы категории в порядке: от старых статей к новым.

Например, «Блог категории» имеет регулируемый параметр «Порядок материалов» в настройках пункта меню: «Меню» - пункт меню – «Дополнительные параметры» - «Параметры макета Блога».

Как видно на изображении, порядок можно задать разными способами:

  • по дате;
  • по заголовку;
  • по автору и т.п.

А  вот, «Список категории» на такую настройку вообще не реагирует.

Пришлось копать в шаблоне вывода списка материалов.

Его относительный путь: \components\com_content\views\categories\tmpl\default_items.php

И что мы видим? В файле шаблона вывода компонента имеется обращение к базе данных! Хотя используется модель MVC. Неужели, нельзя было этот запрос осуществить в файле модели стандартного компонента Джумлы?

Хорошо, допустим здесь проблема. Как будем решать?

Со строчки 55 по 63 строчку происходит обращение к базе данных MySQL. В переменную $query записывается весь список материалов, которые относятся к определенной категории, причем порядок статей наследуется из самой базы данных. Самые свежие статьи оказываются в самом конце таблицы _content

Далее этот список материалов конвертируется в обычный массив $res с помощью метода loadObjectList().

Следующий шаг – пробегаемся по массиву $res с помощью цикла foreach и записываем каждое значение материала в отдельные пункты списка

    .

    С работой скрипта мы разобрались. Итак, как поменяем порядок материалов?

    Всё очень просто. Главное, знать основные функции 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 '

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

     

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


    Обновить