paginateでページングした時に欲しいページ関連の値

CakePHP1.2からはpaginate標準で使えるらしく使ってみた。

<?php

	$this->paginate = array(
		'limit' => 10
	);
	$this->set('videos', $this->Paginate());

?>

規約どおりにvideoモデルをページングさせたいだけなので、これだけでviewで使える。
でも問題があって、view側で簡単にpage関連の情報を扱うことができない。例えば現在のページとか、全部で何ページあるのかとか・・・。

viewから何とかして値を取ろうとすると

	$this->params['paging']['Videos']['page'];

てなって、大変深くなってしまう。ので、helperを拡張してページングすると勝手に使えるようになるpaginatorHelperから

	$paginator->paging('page');

で欲しい値が引けるようにしてみる。まず、appフォルダ以下にapp_helper.phpを作成

<?php
class AppHelper extends Helper
{

    var $helpers = array('Html');
    
    public function paging($key){
    	$paging = $this->params['paging'][$this->defaultModel()];
    	if($key == "start")
    		return ife($paging['count'] >= 1, ($paging['page'] - 1) * ($paging['options']['limit']) + 1, '0');
    	else if($key == "end"){
    		$start = ife($paging['count'] >= 1, ($paging['page'] - 1) * ($paging['options']['limit']) + 1, '0');
    		return ife(($paging['count'] < ($start + $paging['options']['limit'] - 1)), $paging['count'], ($start + $paging['options']['limit'] - 1));
    	}
    	return $paging[$key];
    }

    public function paging_url($page){
    	return $this->Html->url(array('page' => $page));
    }    


}

をコピペ。そうすると、各種viewから

<?php
$paginator->paging('page');//現在のページ
$paginator->paging('pageCount');//トータルのページ数
$paginator->paging('count');//全アイテム数
$paginator->paging('start');//現在のページの最初のアイテムのインデックス
$paginator->paging('end');//現在のページの最後のアイテムのインデックス
?>

となる。もっといい方法があれば教えてください。ちなみの別ページへのリンクをはる場合は、

<a href="<?= $paginator->paging_url(2);">2ページ目</a>

でどうぞ!