Постраничный вывод (Пргинация) в 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}