MisterN 11 декабря 2014 0 6
Вот здесь 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 Наверн опечатка в шаблоне.
6 комментариев
Fi1osof1
Fi1osof 11 декабря 2014г в 23:35 #
Да, про этот глук знаю, все руки не доходят поправить. Там фейковые УРЛы, из-за чего глючит сниппет getPage. Надо заменить там пагинацию. Поправлю как-нибудь на досуге.
b
bezumkin 12 декабря 2014г в 08:20 #
Привет, Николай!

В pdoPage ссылка генерируется исходя из фактического url, поэтому там такого глюка нет.

Ну и можно, заодно, сразу настроить ajax-пагинацию, так же из коробки.

Там еще много разных преимуществ по сравнению с getPage, рекомендую попробовать.
b
bezumkin 12 декабря 2014г в 08:21 #
Прошу прощения за такие пробелы между фразами. Без превью сложно понять, как будет отрендерен комментарий.
Fi1osof1
Fi1osof 12 декабря 2014г в 13:40 #
Ничего страшного.
А превью когда-нибудь сделаем, когда руки дойдут.
Fi1osof1
Fi1osof 12 декабря 2014г в 13:39 #
Привет, Василий!
Рад, что ты наконец-то нас посетил:) За это я тебе поднял статус до полноценного члена Клуба.

Про 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}
Fi1osof1
Fi1osof 12 декабря 2014г в 13:40 #
Поправил.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.