оригинальная версия версия для слабовидящих контрастная версия выключить изображения включить изображения RSS FEED K2 NEWS
Воскресенье, 20 Июль 2014 04:00

Joomla 3, Количество материалов на странице категории

Работая с новой версией старого сайта, т.е. с этим сайтом – с ивой, у меня возникла неприятная ситуация и пожалуй даже две.

Первая неприятность заключается в том, что в отличие от предыдущей 1.5 версии Joomla с которой я привык работать, категории теперь имеют 2 вида, «Блог» и «Список». И по умолчанию идёт режим «Блог». Казалось бы, ничего безобидного нет, это тот же список, но только выглядит чуть иначе. Но если посмотреть исходный код страницы категории в режиме «Блог», то можно увидеть развёрнутым каждый материал. Т.е. просто так загруженную всеми вложенными материалами категорию.

Я имею предположение, что сделано это было для того, чтобы умельцы могли «допилить» этот режим под внешний вид категории, таким образом, как если бы посетитель читал ленту новостей. Почему именно «допилить»? Да потому что в сырой версии это сделать забыли. Такой порядок вещей меня не устроил и потому я переключил параметры категорий в режим «Список», но и здесь меня ждало разочарование.

Всё дело в количестве материалов на странице и его отображением, в ранней версии Joomla можно было просто создать категорию и не заморачиваться. У каждой категории сразу были стандартные настройки и уже, если этого оказалось мало – включались плагины и компоненты, позволяющие изменить внешний вид системы.

В Joomla 3 количество материалов на странице отражено в файле:

components\com_content\views\category\tmpl\default.xml

строка 259, переменная «display_num», ниже на 260 изменяем значение:

default="10"

На нужное, нам. Я оставил 10, хотя первоначально у меня по неясной причине было 5. И что удивительно, нигде в настройках системы я так и не смог найти настройки значения «по умолчанию» для количества материалов на странице категории.

Вы думаете это единственная странность? Нееет, на этом странности не заканчиваются. Чтобы страница категории приняла эти настройки, нужно чтобы эта самая категория имела свою привязку к меню.

И самое главное, нужное Вам значение желательно указать в файле default.xml до того, как Вы решите создавать подпункты меню с категориями/подкатегориями, почему?

Потому что значение «display_num» для каждой категории прописывается в базе данных отдельно. Да да, прописывается то оно прописывается, но в базовых настройках Вы этого нигде не найдёте, только лезть вручную искать/править.

Для сохранения исправленного «display_num», достаточно «пересохранить» уже существующую страницу, если она уже была создана. Да, без этого жеста Вы можете даже удалить тот самый default.xml, Joomla сей пропажи не заметит.

Кому легче работать с БД, нежели ковырять админку, в базе данных настройки категорий ищите по адресу:

*префикс*_menu – здесь по каждому пункту-категории, как уже писал выше можно задать своё собственное количество отображаемых страниц (ищем значение default_num).

Примечание: количество отображаемых страниц в категории я смог настроить только так и никак иначе.

Пагинация оказалась более «доступной», файл:

libraries\cms\pagination\pagination.php

Здесь 786-я строка:

$data->previous->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . ($page));

Меняется на:

$data->previous->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . ($page-5));

А 799-я строка:

$data->next->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . ($next));

Меняется на:

$data->next->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . ($next+5));

Где -5 и +5 меняются на нужное значение, поясню – если вдруг возникнут проблемы с пагинацией (у меня было, потому и пишу), механическое решение проблемы можно найти в этих строках.

Чтобы не было проблем с пагинацией и отображением материалов, для каждой подкатегории создаётся свой собственный пункт меню. Справедливо будет заметить, что эти подпункты меню часто – в этом самом меню мешают. Это не было предусмотрено разработчиками Joomla (они такие милашки, да), а потому придётся это предусмотреть за них и просто отсечь всё левое, к примеру, с помощью CSS добавлением такой строки:

.nav-pills li ul li {display: none;}

На этом, пожалуй, всё.

Спонсоры: