11 дек. 2014 г., 19:27

Глюк с пагинацией на modxclub

Вот здесь modxclub.ru/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/ опускаюсь вниз к ссылкам пагинации, кликаю страницу 2, а она не найдена modxclub.ru/tag/tag/?page=2 Очевидно, что в ссылке пагинации не подставляется нужный тег и эта ссылка работает отлично modxclub.ru/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/?page=2 Наверн опечатка в шаблоне.
Да, про этот глук знаю, все руки не доходят поправить. Там фейковые УРЛы, из-за чего глючит сниппет getPage. Надо заменить там пагинацию. Поправлю как-нибудь на досуге.
Привет, Николай!
В pdoPage ссылка генерируется исходя из фактического url, поэтому там такого глюка нет.
Ну и можно, заодно, сразу настроить ajax-пагинацию, так же из коробки.
Там еще много разных преимуществ по сравнению с getPage, рекомендую попробовать.
Прошу прощения за такие пробелы между фразами. Без превью сложно понять, как будет отрендерен комментарий.
Привет, Василий! Рад, что ты наконец-то нас посетил:) За это я тебе поднял статус до полноценного члена Клуба.
Про pdoPage в курсе, но он нам не подходит по нескольким причинам: 1. Как ты знаешь, у нас с тобой в принципе разные подходы в разработке и модулях. У тебя все завязано на pdoTools и чанках/сниппетах, а мы даже сниппеты редко используем, не говоря уже о чанках, у нас все на смарти и процессорах. 2. Даже если бы захотел взять pdoPage, не стал бы для этого тянуть весь pdoTools, это было бы фигачить по воробьям из пушки. 3. Не нравится внутри сниппета использование переменных $_GET и $_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}
Ничего страшного. А превью когда-нибудь сделаем, когда руки дойдут.

Добавить комментарий