目次

ページャを作成する

ページャを作成する


書いた人:shoma


概要

検索結果やリストの一覧などのページにGoogle風のページリンクを作成します。

Ethna_Util::getDirectLinkList()を使用してページャを作成します。 Ethna_Util::getDirectLinkList(全データ数, 表示オフセット, 1ページあたりに表示する件数)となっています。以下の例ではstartが指定されるオフセットになっています。

Pagerを作成する例

function perform()
{
    $this->total = 100;
    $this->offset = $this->af->get('start') == null ? 0 : $this->af->get('start');
    $this->count = 10;

    $this->getPager();
    return 'index';
}

/**
*
* ページャの作成
*
* @access public
* @return void
*/
function getPager(){
    $pager = Ethna_Util::getDirectLinkList($this->total, $this->offset, $this->count);
    $next = $this->offset + $this->count;
    if($next < $this->total){
        $last = ceil($this->total / $this->count);
        $this->af->setApp('hasnext', true);
        $this->af->setApp('next', $next);
        $this->af->setApp('last', ($last * $this->count) - $this->count);
    }
    $prev = $this->offset - $this->count;
    if($this->offset - $this->count >= 0){
        $this->af->setApp('hasprev', true);
        $this->af->setApp('prev', $prev);
    }
    $this->af->setApp('current', $this->offset);
    $this->af->setApp('link', 'localhost');
    $this->af->setApp('pager', $pager);
}

ページャを表示するテンプレートの例

テンプレート側では

{if $app.hasprev}
<a href="{$app.link}?start=0">最初</a>&nbsp;<a href="{$app.link}?start={$app.prev}">&lt;&lt;</a>
{else}
最初&nbsp;&lt;&lt;
{/if}
{foreach from=$app.pager item=page}
{if $page.offset == $app.current}
<strong>{$page.index}</strong>
{else}
<a href="{$app.link}?start={$page.offset}">{$page.index}</a>
{/if}
&nbsp;
{/foreach}
{if $app.hasnext}
<a href="{$app.link}?start={$app.next}">&gt;&gt;</a>
&nbsp;<a href="{$app.link}?start={$app.last}">最後</a>
{else}
&gt;&gt;&nbsp;最後
{/if}

できあがり

pager.png

comment