前のエントリーで少し予告みたいなことしたけど、作成した自作クラスを紹介。
Pageクラス。
これは、普段グーグル検索やヤフー検索などで目にする、「検索結果○件のうち、■件~▲件まで表示」といういわゆるページングと呼ばれる処理の単純計算を担当するクラス。
この計算は、全要素数・表示数・表示開始ページ番号、これら3つを与えればすべて計算できるんですが、何気に余りがどーだこーだでとっても大変。ハマるとかなり時間を無駄に使うワケで・・・。Webアプリ開発をやったことのある人は、触り始めの頃とかここらへんの簡単そうで時間を食う感じはわかっていただけるかなと。
そこで、このPageクラスを用いれば、インスタンスの要素にアクセスするだけで、煩雑な計算を省略することが可能に。
なお、Perlには同名のモジュールがあって、変数の名前がとてもわかりやすく参考とさせて頂きました。クラス内の計算式はボクのオリジナル(開発に2時間もかかっちゃたけど・・・org)ね。
さて、実際にPageクラスを使用するには次のように記述。
ここで総数が37、表示数が10、表示ページ番号が4としたソース例を以下に紹介。
var myPage:Page = new Page(totalEntries, entriesPerPage, [tragetPage]);
ここで、コンストラクタ内の引数は以下。
- 総要素数(検索でいうところの検索結果数)
- 1ページに表示する要素数
- 表示したいページ番号(オプション)
| totalEntries | 総要素数。コンストラクタで渡された値が代入される。 |
|---|---|
| entriesPerPage | 1ページ当たりの要素数。これもコンストラクタで渡された値が代入される。 |
| currentPage | 表示ページ番号。コンストラクタへ渡すことで、表示ページを指定することが可能。指定しない場合は1がデフォルト値として設定される。 |
| firstPage | 最小ページ番号。つねに1。 |
| lastPage | 最大ページ番号。 |
| nextPage | 現在の表示ページ番号の次のページ番号。 次のページが存在しない場合(表示ページ番号と最大ページ番号が同じ場合)、0を返す。 |
| previousPage | 現在の表示ページ番号の前のページ番号。 前のページが存在しない場合(表示ページ番号と最小ページ番号が同じ場合)、0を返す。 |
| firstOnThisPage | 現在の表示ページのおける最初の要素番号。 |
| lastOnThisPage | 現在の表示ページのおける最後の要素番号。 |
| entriesOnThisPage | 現在の表示ページのおける要素数。1からentriesPerPageの値を取る。 |
var myPage:Page = new Page(37, 10, 4);
// 結果
/*
totalEntries = 37
entriesPerPage = 10
currentPage = 4
firstPage = 1
lastPage = 4
nextPage = 0
previousPage = 3
firstOnThisPage = 31
lastOnThisPage = 37
entriesOnThisPage = 7
*/
最後にこのPageクラスのソース。
インスタンスを生成すると計算するだけのホントに単純なクラスですホント。
よかったら使ってみて下さい(自己責任でたのんます)。
class Page{
var totalEntries:Number;
var entriesPerPage:Number;
var currentPage:Number = 1;
var nextPage:Number = 0;
var previousPage:Number = 0;
var firstPage:Number = 1;
var lastPage:Number = 1;
var entriesOnThisPage:Number;
var firstOnThisPage:Number;
var lastOnThisPage:Number;
function Page(t:Number, p:Number, c:Number){
totalEntries = t;
entriesPerPage = p;
currentPage = c ? c: 1;
firstPage = 1;
lastPage = Math.ceil(totalEntries/entriesPerPage);
nextPage = currentPage < lastPage ? currentPage+1: 0;
previousPage = currentPage > firstPage ? currentPage-1: 0;
firstOnThisPage = previousPage * entriesPerPage + 1;
lastOnThisPage = nextPage>0 ? currentPage * entriesPerPage: previousPage * entriesPerPage + totalEntries%entriesPerPage;
entriesOnThisPage = lastOnThisPage - firstOnThisPage + 1;
}
}

Send Your Comment