Flexigrid:ページ表示
最終更新日時:2010-09-27 14:57:00
Flexigrid
Flexigrid
概要
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 });