The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Tripletail::Pager - ページング処理

SYNOPSIS

  my $DB = $TL->getDB('DB');
  my $pager = $TL->newPager($DB);
  $pager->setCurrentPage($CGI->get('pageid'));

  my $t = $TL->newTemplate('template.html');
  if($pager->paging($t->node('paging'), 'SELECT * FROM foo WHERE a = ?', 999)) {
    $t->node('paging')->add;
  } else {
    $t->node('nodata')->add;
  }

DESCRIPTION

ページング処理を行う。

決められた形式のTripletail::Templateノードに展開する。

テンプレート形式

  <!begin:paging>
    <!begin:PrevLink><a href="<&PREVLINK>">←前ページ</a><!end:PrevLink>
    <!begin:NoPrevLink>←前ページ<!end:NoPrevLink>
    <!begin:PageNumLinks>
      <!begin:ThisPage><&PAGENUM><!end:ThisPage>
      <!begin:OtherPage>
        <a href="<&PAGELINK>"><&PAGENUM></a>
      <!end:OtherPage>
    <!end:PageNumLinks>
    <!begin:NextLink><a href="<&NEXTLINK>">次ページ→</a><!end:NextLink>
    <!begin:NoNextLink>次ページ→<!end:NoNextLink>
    ...
    <!begin:MaxRows>全<&MAXROWS>件<!end:MaxRows>
    <!begin:FirstRow><&FIRSTROW>件目から<!end:FirstRow>
    <!begin:LastRow><&LASTROW>件目までを表示中<!end:LastRow>
    <!begin:MaxPages>全<&MAXPAGES>ページ<!end:MaxPages>
    <!begin:CurPage>現在<&CURPAGE>ページ目<!end:CurPage>
    ...
    <!begin:Row>
      <!-- 行データを展開する <&XXX> タグを半角で記述する -->
    <!end:Row>
    ...
  <!end:paging>
  <!-- 以下は Pager クラスの処理とは関係ないため、無くても良い -->
  <!begin:nodata>
    一件もありません
  <!end:nodata>

必須でないノードは次の通り:

  PageNumLinks, MaxRows, FirstRow, LastRow, MaxPages, CurPage

これらのノードが存在しない場合は、単に無視される。

Rowノードは "paging" メソッドを利用する場合のみ使用される。

"pagingArray""pagingHash" メソッドを利用する場合、 メソッド実行によって paging ノードが展開されるため、 その外側にデータ用のノードをおかなければならないことに注意する必要がある。

例えば以下のようなテンプレートとなり、メソッドの戻値を ループの中で Rowノードに展開するような形となる。

  <!begin:paging>
    <!begin:PrevLink><a href="<&PREVLINK>">←前ページ</a><!end:PrevLink>
    <!begin:NoPrevLink>←前ページ<!end:NoPrevLink>
    <!begin:PageNumLinks>
      <!begin:ThisPage><&PAGENUM><!end:ThisPage>
      <!begin:OtherPage>
        <a href="<&PAGELINK>"><&PAGENUM></a>
      <!end:OtherPage>
    <!end:PageNumLinks>
    <!begin:NextLink><a href="<&NEXTLINK>">次ページ→</a><!end:NextLink>
    <!begin:NoNextLink>次ページ→<!end:NoNextLink>
    ...
    <!begin:MaxRows>全<&MAXROWS>件<!end:MaxRows>
    <!begin:FirstRow><&FIRSTROW>件目から<!end:FirstRow>
    <!begin:LastRow><&LASTROW>件目までを表示中<!end:LastRow>
    <!begin:MaxPages>全<&MAXPAGES>ページ<!end:MaxPages>
    <!begin:CurPage>現在<&CURPAGE>ページ目<!end:CurPage>
    ...
    ...
  <!end:paging>
  <!begin:Row>
    <!-- 行データを展開する <&XXX> タグを半角で記述する -->
  <!end:Row>
  <!-- 以下は Pager クラスの処理とは関係ないため、無くても良い -->
  <!begin:nodata>
    一件もありません
  <!end:nodata>

METHODS

$TL->newPager
  $pager = $TL->newPager($db_object)

Pagerオブジェクトを作成。 DBオブジェクトを渡す。

DBのグループ名を渡すこともできるが、この指定方法は今後削除される可能性がある。(obsolute)

引数を指定しなかった場合、デフォルトのDBグループが使用されるが、将来はエラーに変更される可能性がある。

setDbGroup
  $pager->setDbGroup($db_group)

非推奨。DBのオブジェクトをnewPagerで渡すことを推奨する。 使用するDBのグループ名を指定する。

setPageSize
  $pager->setPageSize($line)

1ページに表示する行数を指定する。デフォルトは30。

setCurrentPage
  $pager->setCurrentPage($nowpage)

現在のページ番号を指定する。デフォルトは1。

  $pager->setMaxLinks($maxlinks)

各ページへのリンクを最大幾つ表示するかを指定する。デフォルトは10。

setFormKey
  $pager->setFormKey('PAGE')

ページ移動リンクに挿入される、ページ番号キーを指定する。デフォルトは"pageid"。

setFormParam
  $pager->setFormParam($form_obj)
  $pager->setFormParam($hashref)

ページ移動リンクに追加されるフォームを指定する。デフォルトでは何も追加されない。

  $pager->setToLink($url)

ページ移動リンクに使用されるURLを指定する。デフォルトでは自分自身へのリンクを使用する。

setPagingType
  $pager->setPagingType($type)

ページングの種類を選ぶ。

0の場合、最終ページを超えたページを指定した場合、undefが返る。 1の場合、最終ページを超えたページを指定した場合、最終ページが返る。

設定しなかった場合は0が設定される。

但し、1を選択した場合で、最終ページを超えるページを指定した場合、SQLを再度発行するため、通常より遅くなる。

getPagingInfo
  my $info = $pager->getPagingInfo

各種パラメータを返す。パラメータの内容は以下の通り。セットされてない場合はundefがセットされている。

$info->{db}

DBオブジェクト。

または、使用するグループ名。(obsolute)

$info->{pagesize}

1ページに表示する行数

$info->{current}

表示する(された)ページ番号

$info->{maxlinks}

リンクの最大数

$info->{formkey}

ページ移動リンクに挿入される、ページ番号キー

$info->{formparam}

ページ移動リンクに追加されるフォーム。Tripletail::Formクラス

$info->{pagingtype}

ページングの種類

$info->{maxpages}

存在している最大ページ

$info->{linkstart}

リンクの開始ページ数

$info->{linkend}

リンクの終了ページ数

$info->{maxrows}

全体の件数

$info->{beginrow}

取得を開始した箇所

$info->{rows}

取得した件数

paging
  $pager->paging($t->node('pagingblock'), $sql, @param)
  $pager->paging($t->node('pagingblock'), [$sql, $maxrows], @param)

指定したノードに、指定したSQLを実行してページングする。 展開するデータが1件も無い場合は 0 を、表示できるページ数を超えたページ数を指定 された場合は、setPagingTypeで設定されている値が0(デフォルト)であれば、undefが、 1であれば最終ページのデータ件数、それ以外の場合はデータ件数を返す。

$maxrows で件数のカウントを別途指定できる。 指定を省略した場合、SQL 文の先頭部分を SELECT SQL_CALC_FOUND_ROWS ~ に書き換えたもの を使用して、自動的に SELECT FOUND_ROWS() を実行し件数をカウントする。 UNION を使用した場合は正常に動作しない。

pagingArray
  $result = $pager->pagingArray($t->node('pagingblock'), $sql, @param)
  $result = $pager->pagingArray($t->node('pagingblock'), [$sql, $maxrows], @param)

指定したノードに、指定したSQLを実行してページングする。 Row ノードは展開せずに、ページング対象のデータを配列の配列へのリファレンスで返す。 展開するデータが1件も無い場合は 0 を、表示できるページ数を超えたページ数を指定 された場合は、setPagingTypeで設定されている値が0(デフォルト)であれば、undefが、 1であれば最終ページのデータを返す。

その他は "paging" と同じ。

pagingHash
  $result = $pager->pagingHash($t->node('pagingblock'), $sql, @param)
  $result = $pager->pagingHash($t->node('pagingblock'), [$sql, $maxrows], @param)

指定したノードに、指定したSQLを実行してページングする。 Row ノードは展開せずに、ページング対象のデータをハッシュの配列へのリファレンスで返す。 展開するデータが1件も無い場合は 0 を、表示できるページ数を超えたページ数を指定 された場合は、setPagingTypeで設定されている値が0(デフォルト)であれば、undefが、 1であれば最終ページのデータを返す。

その他は "paging" と同じ。

SEE ALSO

Tripletail
Tripletail::DB

AUTHOR INFORMATION

    Copyright 2006 YMIRLINK Inc.

    This framework is free software; you can redistribute it and/or modify it under the same terms as Perl itself

    このフレームワークはフリーソフトウェアです。あなたは Perl と同じライセンスの 元で再配布及び変更を行うことが出来ます。

    Address bug reports and comments to: tl@tripletail.jp

    HP : http://tripletail.jp/