Постраничный вывод (Пргинация) в ModxSmarty Хочу в

Постраничный вывод (Пргинация) в ModxSmarty

Хочу выложить сюда пример вывода постраницно, т.к. изначально пришлось перелопатить исходники, чтобы понять как это работает. Думаю будет полезно для других.

Итак. Сначала Шаблон вывода нумерованных страниц tpl/pagination.tpl

{pagination resource_id=$modx->resource->id       items=$items limit=$limit current=$current_page prev_next=true        assign=pagination}   

            <div class="pagination">
            {assign var=prev value=1}

            {if $pagination.prev.id}
            <a href="{$pagination.prev.href}">предыдущая</a>
            {/if}
           
            {foreach from=$pagination.pages item=page name=pagination}                 
                {if (($page.id-$prev) > 1)}
                <span>...</span>
                {/if}
                {if $page.type == 'current'}
                <span class="current">{$page.id}</span>
                {else}
                <a href="{$page.href}">{$page.id}</a>
                {/if}
            {assign var=prev value=$page.id}    
            {/foreach} 

            {if $pagination.next.id}
            <a href="{$pagination.next.href}">следующая</a>
            {/if}
             
            </div>

Что мы передаем в пагинатор:

  • resource_id — ID — ресурса, на котором выводится постраничный вывод. Обязательно. По-умолчанию почему то стоит «1», поэтому если не указать, то добавляет ?page=2 к корню сайта
  • items — Общее количество записей для вывода. Это значение будем получать в шаблоне самой страницы. см. ниже
  • current — текущая страница (присваиваем в шаблоне страницы)
  • limit — количество записей на странице (По умолчанию 5, но мы присвоим свое значение также в шаблоне страницы.)

Теперь сам шаблон страницы tpl/news.tpl

{extends  file="tpl/layout-white.tpl"}

{block  name=after_content}

{assign var=limit value=7}
{assign var=current_page value=$smarty.request.page|default:1}

{assign var=params value=[
    "where" => [
        "parent"    => $modx->resource->id
    ]
    ,"page"=>$current_page
    ,"limit"=>$limit
    ,"sort" =>  "publishedon"
    ,"dir" => "ASC"
    ,"includeTVs" => true
]}

{processor action="site/web/getdata" ns="modxsite" params=$params assign=result}

{assign var=items value=$result.total}
{*include file="tpl/pagination.tpl"*}

<ul id="news-list">
{foreach $result.object as $object}
       {assign var=atitle value=$object.pagetitle}
       {if     $object.longtitle}{assign var=atitle  value=$object.longtitle}{/if}
       <li>
           <h3><a href="{$object.uri}" title="{$atitle}">{$object.pagetitle}</a> </h3>
           <p>{$object.summary}</p>
           <div><small>{$object.publishedon|date_format:"%Y-%m-%d %H:%M:%S"}</small></div>
       </li>
{/foreach}
</ul>

{include file="tpl/pagination.tpl"}
{/block}

Тут в принципе интуитивно все понятно. Единственное что отмечу — это то откуда мы берем общее количество записей.

{assign var=items value=$result.total}