dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

kohanaのテスト12-17・・・ページネーションを改善する

 github を見ていたら、Kohana 3.2 Pagination なるリポジトリを見つけました。早速 NetBeans でクローンを作って検討してみました。結論としては使えません。これは未完成ですね。生成する URL が index を含んでいて気に入りません。各メソッドも作者の意図通りには動いていないようです。

 しかしビューは使えそうなので、思いっきりシンプルに作りなおしてみました。

 

今回追加変更したファイル

 詳細は github を見て下さい。

・kohana/application/classes/contents/pagenation.php
・kohana/application/classes/contents/upload.php
・kohana/application/views/pagination/basic.php
・kohana/application/views/pagination/floating.php
・kohana/application/views/test12/upload/media.php

 

コントローラ

 ページネーションの表示部は単独でスニペットにしてみました。

・・kohana/application/classes/contents/pagenation.php

<?php defined('SYSPATH') or die('No direct script access.');

class Contents_Pagenation {

    static function setup($total_pages, $current_page, $url, $view = 'pagination/basic') {

        $previous_page = ($current_page > 1) ? $current_page - 1 : FALSE;
        $next_page = ($current_page < $total_pages) ? $current_page + 1 : FALSE;
        $first_page = ($current_page == 1) ? FALSE : 1;
        $last_page = ($current_page >= $total_pages) ? FALSE : $total_pages;

        $view = View::factory($view);
        $view->url = $url;
        $view->total_pages = $total_pages;
        $view->current_page = $current_page;
        $view->previous_page = $previous_page;
        $view->next_page = $next_page;
        $view->first_page = $first_page;
        $view->last_page = $last_page;

        return $view->render();
    }

}

?>

・kohana/application/classes/contents/upload.php

<?php

defined('SYSPATH') OR die('No direct access allowed.');

class Contents_Upload {

    static function images($page, $author) {

        $model = Model::factory('test12_posts');
        if ($author) {
            $array = array('post_author' => $author);
        } else {
            $array = NULL;
        }

        $select = $model->selectimage($array);
        $paginator = Zend_Paginator::factory($select);

        if (!$page) {
            $page = 1;
        }

        $pagecount = $paginator->count();
        $page = ($page > $pagecount) ? $pagecount : $page;
        $paginator->setCurrentPageNumber($page);

        $url = '/kohana/test12_upload?page=';
        $pagination = Contents_Pagenation::setup($pagecount, $page, $url, 'pagination/floating');

        $view = View::factory('test12/upload/media');
        $view->data = $paginator;
        $view->single = FALSE;
        $view->page = $page;
        $view->pagination = $pagination;

        return $view->render();
    }

}

?>

 

動作試験

 なにかクールになった感じがします。kohana 3.2 でページネーションが削除された理由が良くわかりました。