超適当なページャを表示するTT のテンプレート

pager.tt

[%
    disp_pages = 10;
    disp_pages = disp_pages - 1;
%]
[%
    offset = c.stash.pager.offset;
    limit  = c.stash.pager.limit;
    rows   = c.stash.pager.rows;
%]
[%
    url    = c.stash.pager.url;
    query  = c.stash.pager.query;
%]
[%
    curr_page = ( offset div limit ) + 1;
    max_page  = ( rows + limit - 1 ) div limit;
%]
[%
    disp_min_page = curr_page - disp_pages < 1
                    ? 1
                    : curr_page - disp_pages;
    disp_max_page = disp_min_page + disp_pages > max_page
                    ? max_page
                    : disp_min_page + disp_pages;
%]

[% IF curr_page > 1 %]
    [% prev_offset = offset - limit %]
    <a href="[% url %]?offset=[% prev_offset %]&limit=[% limit %][% query %]">&#60;&#60;</a>
[% ELSE %]
    &nbsp;&nbsp;
[% END %]

[% list = [ disp_min_page .. disp_max_page ] %]
[% FOR i IN list %]
    [% IF i == curr_page %]
        [% i %]
    [% ELSE %]
    <a href="[% url %]?offset=[% ( i - 1 ) * limit %]&limit=[% limit %][% query %]">[% i %]</a>
    [% END %]
[% END %]

[% IF curr_page < max_page %]
    [% next_offset = offset + limit %]
    <a href="[% url %]?offset=[% next_offset %]&limit=[% limit %][% query %]">&#62;&#62;</a>
[% END %]

んで、

<< 1 2 3 4 5 6 7 8 9 10 >>

こんな感じの出る。

呼び出し側は、

なんらかの方法で

    • disp_pages 表示するページの数
    • offset 何件目から表示しているか
    • limit 1ページ内の表示件数
    • url ページャアクションのURL
    • qurey ページャアクションのクエリー

を渡しあげれば良い。

ex.) 
  [%
     INCLUDE pager.tt
       disp_pages = 10
    offset = 50
       limit = 50
       url = ほげほげ
       query = 的な。
  ]%