→ При разработке сайта лендинг в подарок! ЖМИ! ←
Янв
4

Делаем второй вид пагинации в Joomla 1.5

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

Пилите, Шура, пилите. Она золотая

Этим мы и займемся. На примере компонента PhocaGallery. Будем допиливать страницу вывода категории с фотографии. По дизайну задумано, чтобы блок с прокруткой картинок выглядел так:

Какую постраничную навигацию в Joomla нужно сделать

При этом изначально нужно было оставить возможность навигации с цифрами страниц в статейном разделе (блог раздела). Потом, правда, немного переигралось. Но думаю, что со временем введем и такой вариант. Сейчас оставили навигацию в кружочках во всех разделах.

Итак, чтобы разделить навигацию на отдельные типы введем дополнительный параметр TYPE. Пусть когда он равен единице, выводятся кружочки, а когда отсутствует — стандартная пагинация Joomla.

Пилим файл постраничной навигации Joomla

Файл, который отвечает за формирование пагинации находится libraries/joomla/html/pagination.php Его и будем пилить.

Находим функцию getPagesLinks (примерно 194 строка). Она имеет такое объявление

1
function getPagesLinks()

добавим сюда наш параметр

1
function getPagesLinks($type=NULL)

ставим его в NULL, чтобы не вылазила ошибка вызова функции без этого параметра. Далее всё просто: делаем простой логический переключатель если…то

1
2
3
4
5
if ($type==1)
{
// Build the page navigation list
...
} else { ...}

Здесь идет жесткое сравнение с единицей. Можно было бы просто проверить наличие переменной, но вдруг потом мы захотим ввести третий тип постраничной навигации в Joomla? Сейчас вообще Else можно не писать, т.к. идет return внутри оператора if, но пусть будет, не помешает.

Внутрь каждого из вариантов я скопировал содержание функции. Теперь самое время изменять параметры, которые нас интересуют. К примеру, нам не нужны «первая» и «последняя» страницы, а также число страниц. Достаточно оставить только «следующая» и «предыдущая». Для этого комментируем ненужные строки (там всё предельно понятно и просто, не буду код вставлять).

Делаем альтернативную пагинацию в шаблоне

Полезно сделать и альтернативный вывод навигации в шаблоне. Для этого подправим переменную $chromePath (обратите внимание, что подключаемый шаблон для данного варианта — pagination2.php). Нам его нужно сделать в папке html используемого на сайте шаблона. Можно для начала просто тупо скопировать файл pagination.php, который там уже есть.

1
$chromePath = JPATH_THEMES.DS.$mainframe->getTemplate().DS.'html'.DS.'pagination2.php';

Теперь у нас уже есть два разных варианта пагинации в Joomla! Но их ещё нужно немного подпилить в плане вывода информации. В моем случае поведение ссылки назад и вперед описывается разными классами, а стандартный вывод пагинации не позволяет вешать разные классы на такие ссылки. Что ж, введем ещё один параметр!

Открываем нами созданный файл pagination2.php и находим там строчку (сразу пишу с введенным параметром type)

1
function pagination_item_active(&$item,$type=NULL)

И внутри ставим проверку на него

1
2
if ($type) return "<a href=\"".$item->link."\" class='prev'></a>";
return "<a href=\"".$item->link."\" class='next'></a>";

Тут у нас только два варианта возможно, поэтому проверяем просто на наличие параметра и возвращаем нужное значение. Осталось только повесить параметр на вызов функции. Для этого идем к первому редактируемому файлу и ищем там строки, отвечающие за ссылку «назад». Обратите внимание на второй параметр в функциях pagination_item_active и pagination_item_inactive. Это и есть наш параметр

Ссылка «назад»:

1
2
3
4
5
6
7
if ($data->previous->base !== null) {
$list['previous']['active'] = true;
$list['previous']['data'] = ($itemOverride) ? pagination_item_active($data->previous,1) : $this->_item_active($data->previous);
} else {
$list['previous']['active'] = false;
$list['previous']['data'] = ($itemOverride) ? pagination_item_inactive($data->previous,1) : $this->_item_inactive($data->previous);
}

Ссылку «вперед» не обрабатываем. Она у нас по умолчанию выводится, исходя из описанного функционала в файле pagination2.php.

Вот, в принципе, и всё. Посмотреть как это работает можно здесь.

И напоследок полезный совет: на сайте http://icoupons.ru/ino/sheinside/ можно получить купоны на скидку во многих зарубежных интернет-магазинах. Экономьте свои деньги!

Прокомментировать

Рубрики

Наши услуги

В прямом эфире