Привет, Василий! Рад, что ты наконец-то нас посет
Dec 12, 2014
Привет, Василий! Рад, что ты наконец-то нас посетил:) За это я тебе поднял статус до полноценного члена Клуба. Про pdoPage в курсе, но он нам не подходит по нескольким причинам:
- Как ты знаешь, у нас с тобой в принципе разные подходы в разработке и модулях. У тебя все завязано на pdoTools и чанках/сниппетах, а мы даже сниппеты редко используем, не говоря уже о чанках, у нас все на смарти и процессорах.
- Даже если бы захотел взять pdoPage, не стал бы для этого тянуть весь pdoTools, это было бы фигачить по воробьям из пушки.
- Не нравится внутри сниппета использование переменных _REQUEST, слишком глобально. Мне удобней нужные параметры передавать в процессор и чтобы все это было локально. Так что, спасибо за предложение, но не, не подойдет. Но ты все-таки подтолкнул к тому, чтобы я тут порядочек немного навел, должен же я показать, как это у нас делается. Вообще с постраничностью тэгов — это просто результат лени, не добрался поправить, но постраничность с фейковыми УРЛами не была здесь проблема. Все работало на страницах комментариев пользователей. К примеру, если посмотреть страницу modxclub.ru/profile/Fi1osof/stream/, то здесь реальная часть только — profile/, а Fi1osof/stream/ — это фейковая часть УРЛа. Реализована постраничность была с использованием Smarty-плагина, написанного Сергеем Шляховым. Но я решил для себя написать свою постраничность в шаблоне, и немного подправить базовый процессор, чтобы результат выполнения процессора сразу возвращал все необходимое для формирования постраничности — total, count, limit, page. В итоге получается очень простой и удобный вызов:
{$params = [
"page" => $smarty.get.page
]}
{processor action="web/society/users/getdata" ns="modxsite" params=$params assign=result}
{include file="inc/pagination/pagination.tpl"}
А вот код шаблона постраничности (он далек от идеальности, но свою задачу выполняет замечательно):
{if $result.success && $result.object && $result.total > $result.count}
{$page = $result.page|default:1}
{$limit = $result.limit|default:10}
{$total = $result.total}
{$get_params = $get_params|default:$smarty.get}
{$params = []}
{foreach $get_params as $k => $get_param}
{if !in_array($k, ['q', 'page'])}
{$params[$k] = $get_param}
{/if}
{/foreach}
{if !$page_url}
{$id = $id|default:$modx->resource->id}
{$page_url = $modx->makeUrl($id)}
{/if}
{$pages_limit = $pages_limit|default:5}
{$pages = ceil($total/$limit)}
{$start_page = $page - $pages_limit}
{if 1 > $start_page}
{$start_page = 1}
{/if}
<div style="text-align:center">
<ul class="pagination">
{$last_page = $page + $pages_limit - 1}
{if $start_page > 1}
{$get = $params}
{if $url = http_build_query($get)}
{$url = "?{$url}"}
{/if}
<li class="control"><a href="{$page_url}{$url}">Первая</a></li>
{/if}
{$i = 0}
{while $pages >= $start_page && $pages_limit * 2 + 1 > $i}
{$i = $i + 1}
{$get = $params}
{if $start_page != '1'}
{$get.page = $start_page}
{/if}
{if $url = http_build_query($get)}
{$url = "?{$url}"}
{/if}
<li class="{if $start_page == $page}active{/if}"><a href="{$page_url}{$url}">{$start_page}</a></li>
{$start_page = $start_page + 1}
{/while}
{if $pages >= $start_page}
{$get = $params}
{$get.page = $pages}
{$url = http_build_query($get)}
{$url = "?{$url}"}
<li class="control"><a href="{$page_url}{$url}">Последняя</a></li>
{/if}
</ul>
</div>
{/if}