- 概要
- Pagerを作成する例
- ページャを表示するテンプレートの例
- できあがり
- comment
書いた人:shoma
検索結果やリストの一覧などのページにGoogle風のページリンクを作成します。
Ethna_Util::getDirectLinkList()を使用してページャを作成します。 Ethna_Util::getDirectLinkList(全データ数, 表示オフセット, 1ページあたりに表示する件数)となっています。以下の例ではstartが指定されるオフセットになっています。
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> <a href="{$app.link}?start={$app.prev}"><<</a>
{else}
最初 <<
{/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}
{/foreach}
{if $app.hasnext}
<a href="{$app.link}?start={$app.next}">>></a>
<a href="{$app.link}?start={$app.last}">最後</a>
{else}
>> 最後
{/if}
-
最後の一行って「最後 >>」ではなくて、「>> 最後」では? -- yanai
- 修正しておきました。 -- halt
-
$this->af->get('start')→'start'はアクションフォームで定義してないため、リンク機能うまく動けないようです。 ActionFormにstartの定義を追加します。
var $form = array( 'start' => array( 'type' => VAR_TYPE_STRING,
'form_type' => FORM_TYPE_HIDDEN, ), ); -
スパムから復旧.たぶんこれでいいと思うんですけど.(2009/10/17) --sotarok