Как изменить пагинацию в Joomla 1.5
Не знаю как Вам, но меня с первого знакомства с CMS Joomla удивляла убогость класса пагинации Joomla JPagination. Но не будем кидать упреков в адрес разработчиков этой замечательной системы управления контентом. Они нам предоставили замечательный конструктор, а что из него «свинтить» и как, дело нас самих. Тем более, разработчики сделали для нас «отмычку» в классе Joomla JPagination.
- Пагинация в joomla 1.5
- Что конкретно мне не нравится в пагинации Joomla и что я в нем хотел изменить
- Недостатки найденных решений пагинации для Joomla
- Что нам позволяет класс пагинации для Joomla JPagination
- Переопределение пагинации в Joomla
- Как вывести ссылки более чем на 10 страниц
- Как вывести все записи без разбиения на страницы
- Пагинация с последней страницы
- Скачать файлы переопределения пагинации в Joomla
Что конкретно мне не нравится в пагинации Joomla и что я в нем хотел изменить
Словами описывать долго, лучше разок увидеть, покажу на примере. Взгляните как выглядит стандартная пагинация
После непродолжительных размышлений я решил, что пагинация должна выглядеть так
Недостатки найденных решений пагинации для Joomla
Как-то на досуге я поглядел, какие идеи на сей счет есть у других. Оказалось есть. Есть даже модуль и плагин пагинации для Joomla. Разобравшись в статьях подробнее, выяснились недостатки всех предложенных решений. Многие статей о пагинации Joomla предлагают какие-то хаки – залезьте в сырцы класса JPagination, исправьте и вставьте строки. Но что будет, если Вы вдруг решите заменить версию движка? Опять искать заветные строки? Не хочу плохо отзываться об авторах этих статей, тем более они дали пищу для размышлений. Пусть это будет их правильное решение. Что касается модулей и плагинов пагинации – каждый из них отъедает дополнительные ресурсы, ведь каждая Ваша статья проходит обработку этим плагином или модулем.
Что нам позволяет класс пагинации для Joomla JPagination
Класс пагинации Joomla находится в файле JOOMLA_ROOT/libraries/joomla/html/pagination.php. При его изучении выяснилось, что методы getPagesLinks() и getListFooter() могут работать с переопределенными обработчиками, которые переопределяются в директории используемого шаблона, а именно, JOOMLA_ROOT/templates/шаблон/html/pagination.php. Если в Вашем шаблоне этой директории с файлом нет, будьте добры, скопируйте их из шаблона rhuk_milkyway, он входит в стандартную поставку CMS Joomla. В этом файле находятся функции-обработчики:
- pagination_list_footer - показ выпадающего списка числа материалов для метода getListFooter();
- pagination_list_render – построение списка пагинатора для метода getPagesLinks();
- pagination_item_active – представление активного пункта (ссылки на страницы, на которые может быть осуществлен переход);
- pagination_item_inactive – представление неактивного пункта (номер просматриваемой страницы).
Переопределение пагинации в Joomla
Сразу оговорюсь – я делал пагинацию для вполне определенного проекта, в нем использовался вывод только методом getPagesLinks(), все изменения производились соответственно только в функции pagination_list_render. Метод getListFooter() и функцию pagination_list_footer я оставил неизменными, Вы можете либо вернуть пустую строку при возврате из функции, если не хотите его видеть на страницах сайта, или изменить ее по своему желанию.
Функции pagination_item_active и pagination_item_inactive также были оставлены без изменений, хотя часть рутины можно было достигнуть их изменением.
Вот и добрались до функции построения списка пагинатора для метода getPagesLinks(), комментировать ее я не буду, кто знает PHP, тот поймет, кто не поймет – просто скопирует.
В заключении необходимо выложить еще и файлы с картинками «В начало», «Предыдущая» и т.д. Лично я их положил в директорию JOOMLA_ROOT/files/pagination, вы вправе изменить расположение этих файлов по своему усмотрению.
Как вывести ссылки более чем на 10 страниц
В файле JOOMLA_ROOT/libraries/joomla/html/pagination.php находите строку:Вставляете нужное вам значение.
Как вывести все записи без разбиения на страницы
Установить значение limit=0. Как пример: http://e-kzn.ru/index.php?limit=0&limitstart=0.
Пагинация с последней страницы
или ответ на вопрос портала г.Павловска
Посмотрите на этот файл JOOMLA_ROOT/libraries/joomla/html/pagination.php В функции function _buildDataObject() найдите строки Замените условие цикла на for ($i = $stop; $i >= $this->get('pages.start'); $i --)Ссылки будут изменены ... 3 2 1 ..., но "В начало", "В конец", "Предыдущая", "Следующая" будут уже не в тех сторонах, а активной - первая.
JOOMLA_ROOT/libraries/joomla/html/pagination.php придется изменить, скорректируйте ссылки "В начало", "В конец", "Предыдущая", "Следующая". Но тут засада.Ссылка на первую http://e-kzn.ru/index.php?option=com_mycomponent&controller=page
Ссылка на вторую http://e-kzn.ru/index.php?option=com_mycomponent&controller=page&limitstart=100
Как видно, в первом случае нет параметра limitstart, по умолчанию он равен 0.
Необходимо сделать реврайт http://e-kzn.ru/index.php на http://e-kzn.ru/index.php?start=1000000, таким может быть решение вашей задачи пагинации начиная с последней страницы.
Скачать файлы переопределения пагинации в Joomla
Все пути к директориям в статье даны относительно корневой папки сайта!
файлы пагинацииЕсли эта статья показалась вам полезной, пожалуйста, проголосуйте за нее. Это поможет другим быстрее найти эту статью из множества других менее полезных.
( 14 Голосов )
Комментарии
Спасибо большое за полезный материал, очень пригодилась изложенная информация и прикрепленные файлы.
2 Прочитать сколько всего страниц в $this->total и если более одной, то пагинация есть.
3 Прочитать $this->limitstart и если значение ноль, то это самая первая страница.
4 Если это первая страница, написать ваш текст.
5 Этот фрагмент кода вставить в макет страницы, блога или чего вам надо. Но если вы не знаете как реализовать предыдущие четыре пункта, то с этим разобраться будет намного сложнее.
CSS - зачем? Папку files из архива в корневую директорию забросьте и все заработает. В коде явным образом написано где картинки искать src="/files/pagination/page-last.png". Не нравятся мои картинки, нарисуйте свои и замените ими мои. Не нравится путь указанный мною, положите куда сочтете нужным и подправьте приведенный код.
Я думаю,многие, кто скачивает готовое решение далеки от того, чтобы что-то куда-то вставлять в программный код. Поэтому, если не трудно, объясните на пальцах.
Мне нужно, чтобы в строчке было по 15 страниц.
Я нахожу цикл foreach( $list['pages'] as $page )
Что нужно вставить после этой строчки? Или, другими словами, как написать второй цикл?
foreach( $list['pages'] as $page )
{
$i++;
if (!($i%16)) $html .= '<br />'; /*16 - на единицу больше чем необходимо вывести*/
/*Все что тут уже есть до изменений*/
}
2 На отличное знание регулярок не претендую.
3 Решение именно то, что просили когда-то давно пользователи, значит оно востребовано.
4 Копипастер говоришь? Я лично видел копипаст именно этой статьи до буквы с обратной ссылкой на эту страницу. Можете погуглить фрагмент статьи, найдете.
5 Уж больно много брани и ни одного конкретного свидетельства.
6 По поводу левого мыла в комментарии - я не принуждаю заполнять поле e-mail в обязательном порядке, видимо вы по диагонали читаете.
Вы страдаете или невнимательностью, или дежавю, или параноей. Советую записаться на прием к врачу, я не спец в медицине, как и в регулярках.
Это сообщение, выраженное в виде матершины, было отправлено с IP адреса ООО "Аверт Медиа" _http://www.avertmedia.ru.
Москва, ул. Лесная, д. 30, 2-й этаж
Сфера деятельности компании: Контекстная реклама, продвижение сайта, SMO
RSS лента комментариев этой записи