UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: guest от 29 Января 2013, 11:14:55

Название: Длинная пагинация
Отправлено: guest от 29 Января 2013, 11:14:55
Добрый день.
На сайте реализована новостная лента, а которой ОЧЕНЬ много новостей. Это привело к тому, что количество страниц уже превышает 60 штук, при условии, что на страницу выводиться по 20 новостей.
Хочется реализовать в рамках UMI распростронённый метод пагинации с точками (сокращениями):
1 2 3 ... 58 59 60

Не подскажете - как?
Может уже кто-нибудь реализовывал это? Поделитесь..

Спасибо.
Роман
Название: Re:Длинная пагинация
Отправлено: admin от 29 Января 2013, 15:51:00
какой шаблонизатор? что уже пробовали сделать? что получилось\не получилось?

или вопрос в том, что было бы не плохо подкинуть вам готовую верстку? ;)
Название: Re:Длинная пагинация
Отправлено: guest от 29 Января 2013, 16:14:52
Использую tpl, так как изначально на нём был сайт реализован.
Искал по форумам - нашёл вариант с использованием jquery (http://slyweb.ru/jquery/jpaginate/), но это не то, хотя и близко к тому, что нужно.
Пытался также использовать и %cut% - не получилось.

Если добродушных вариантов нету, готов денежку заплатить за это.
В любом случае - здесь распишу вариант реализации этой пагинации.
Название: Re:Длинная пагинация
Отправлено: admin от 29 Января 2013, 16:29:20
возможно ваш вопрос был в том, какими макросами\способами добиться такого результат?

Если так, то вам подойдет макрос system numpages() поищите его в документации umi http://dev.docs.umi-cms.ru/ он как раз и выводит пагинация для постраничного перехода при выводе части большого списка (в том числе и новостей)
Название: Re:Длинная пагинация
Отправлено: guest от 29 Января 2013, 19:23:39
Быть может я не достаточно точно изучил system numpages(), но этот макрос, насколько я понял, выводит весь список страниц сразу, либо грубо обрезает его в зависимости от настроек.
ТО есть, если у меня 10 страниц с новостями, то system numpages() делает одно из двух (цифры, это ссылки на страницы):
- либо так: 1 2 3 4 5 6 7 8 9 10 (полный вывод страниц)
- либо так: 1 2 3 4 5 (обрезанный вывод страниц)

А мне нужно, что бы выглядело так:
1 2 3 ... 8 9 10
Название: Re:Длинная пагинация
Отправлено: admin от 29 Января 2013, 22:55:51
он может и так как нужно вам, ну почти, но вот так 1 2 3 4 5...10 он точно может
Название: Re:Длинная пагинация
Отправлено: guest от 31 Января 2013, 01:52:48
Такс...
Тогда я не понимаю как такое реализовать в рамках system numpages()
Не подскажете?
Название: Re:Длинная пагинация
Отправлено: admin от 31 Января 2013, 02:01:01
если заглянуть в описание данного макроса http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/virtualnyj_modul_system/system_numpages/

то мы увидим что в блоке pages_block мы можем вывести ссылку на первую\последнюю страницу, предыдущую\последующую страницу, плюс номера страниц в количестве 5 штук относительно текущей страницы.

То есть, если нам надо вывести пагинацию вида 1...4 5 6 7 8...11
,то в блоке pages_block мы запишем что-то вроде вот этого...
%tobegin% %pages% %toend%

чтобы появились точки от ссылки первая страница и ссылки последняя страница, мы в блоках (pages_tobegin, pages_toend), по которым выводятся эти ссылки проставим троеточие в нужных местах.

поиграйте с шаблоном, поглядывая в описание данного макроса и вам станет понятней что в нем можно сделать.
Название: Re:Длинная пагинация
Отправлено: guest от 31 Января 2013, 08:16:43
Огромное спасибо.
В итоге, в блоках макроса написАл следующее:

$FORMS['pages_block'] = <<<END
<div>%tobegin% %pages% %toend%</div>
END;

$FORMS['pages_tobegin'] = <<<END
<a href="%tobegin_link%" id="tobegin">на первую страницу</a> ...
END;

$FORMS['pages_toend'] = <<<END
... <a href="%toend_link%" id="toend">на последнюю страницу</a>
END;

И не смотря на то, что циферки по краям (то есть вместо слов "на первую страницу" и "на последнюю страницу") сделать не получилось - всё равно круто!
Название: Re:Длинная пагинация
Отправлено: admin от 31 Января 2013, 10:30:56
хм, действительно в коде явно видно, что номер страницы для блоков "pages_tobegin" и "pages_toend" передается только если вы работаете с xslt шаблоном

if($isXslt) {
$block_arr['toend_link'] = array(
'attribute:page-num' => $pages_count - 1,
'node:value' => $toend_link
);
} else {
$block_arr['toend_link'] = $toend_link;
}

, могу лишь предложить сделать вывод типа
 сделайте свои шаблоны такими
$FORMS['pages_tobegin'] = <<<END
<a href="%tobegin_link%" id="tobegin"> << </a> ...
END;

$FORMS['pages_toend'] = <<<END
... <a href="%toend_link%" id="toend"> >> </a>
END;

но суть это не меняет, номер последней страницы без кастомизации, или без работы с xslt мы не увидим