Flexigrid:ページ表示 - ぷちWiki

最終更新日時:

概要



Flexigrid で Ajax を使うことにより、ページ単位での表示を簡単に実装することが出来ます。
この機能はとても汎用性があると思いますので、非常に便利です。

実装方法



JavaScript 側と Ajax の呼び出されるプログラム側とで実装する必要があります。
ここでは、Flexigrid で Ajax を使用する方法については省きますので、その辺りは FlexigridでAjaxを使う を参照。

JavaScript 側



以下のページ関連の設定項目を指定するだけでOKです。
とても簡単。

項目
概要
usepager
ページ単位での表示を行う
pagestat
現在ページの表示。デフォルトは "Displaying {from} to {to} of {total} items"
pagetext
"Page" の表示
outof
"/" の表示
rp
1ページに表示するデータ数
rpOptions
1ページに表示するデータ数のプルダウンメニューの選択肢
sortname
ソートする対象
sortorder
ソートの昇順/降順

また、colModel 中の sortable でソートできる項目を指定します。
colModel の詳細は FlexigridでAjaxを使う を参照。

以下、実装例です。

 pagestat: '全 {total} 件のうち、{from} - {to} 件目を表示中',
 pagetext: 'ページ',
 outof:    '/',
 rp:    25,
 rpOptions: [25,40],
 colModel : [ {display: 'ID', name: 'id', width: 40, sortable : true, align: 'right' },
              {display: 'タイトル', name: 'title', width: 300, sortable : true, align: 'left' },
              {display: '最終更新日時', name: 'updated_on', width: 200, sortble: true, align: 'left' },
            ],
 sortname: "updated_on",
 sortorder: "desc",


Ajaxで呼び出されるプログラム側



こちらも同様に基本は、FlexigridでAjaxを使う のように実装します。
プラスアルファとして、以下のページ関連情報が取得できますので、これを利用して該当するデータを渡すように実装します。

項目
概要
page
表示するページ数
rp
1ページあたりの表示数
sortname
ソートする対象
sortorder
ソートの昇順/降順

以下、Perl プログラムの例です。

 use Encode;
 use JSON;
 
 ...
 
 my $page = $self->param('page');
 my $rp = $self->param('rp');
 my $sortname = $self->param('sortname') || '';
 return unless $sortname;
 
 my @all_rows = TEST::DB->retrieve_all_sorted_by(join(' ', $sortname, $self->param('sortorder')));
 my $total = @all_rows;
 my @rows = ();
 for my $w (@all_rows[($page - 1) * $rp .. $page * $rp - 1]) {
     push @rows, { id    => $w->id,
                   cell  => [ $w->id,
                              Encode::decode_utf8($w->title),
                              $w->updated_on->strftime('%Y-%m-%d %H:%M:%S'),
                            ],
                 } if $w;
    }
    my $result = { page => $self->param('page'),
                   total => $total,
                   rows  => [ @rows ],
                 };
    print $self->header(-type => 'text/x-json', -charset => 'utf-8'),
          to_json($result, { utf8 => 1 });