LoginSignup
7
10

More than 5 years have passed since last update.

ページング用Smartyテンプレート

Last updated at Posted at 2013-07-09

いままでいったいいくつのページャーを書いてきたのだろう・・・
いつまでも作りなおしているのは頭が悪いので、そろそろしっかり作ろうと思いました。

使い方

1.PHPでデータ構造体を作成してSmartyに出力する

例)

$paging_data = array(
'total_row_count' => 119,
'page_row_count' => 10,
'current_page' => $_REQUEST['p'],
'url' => 'http://localhost/paging.php?p=%d';,
);

定義と書式)

  • total_row_count : 表示するデータの全件数
  • page_row_count : 1ページに表示するデータの件数
  • current_page : 現在のページ(ブランク可)
  • url : ページング他ページのURL。ページ数部分を "%d" と記述する

2.ページャーを埋め込みたい箇所でページング用Smartyテンプレートを include する

例)

定義と書式)

  • file : 後述するテンプレートコードを格納したファイル名
  • paging_data : 1で定義したデータ構造体
  • pager_type : a もしくは b を入力する。 aはシンプルに「前へ」「次へ」。 bはGoogle検索結果形式
  • add_link_to_edge : 任意項目。値を入力すると、最初のページと最後のページへのリンクを出力する

Smartyテンプレートコード(_paging.tpl という名前で保存)

<!--{$total_page = ceil($paging_data.total_row_count / $paging_data.page_row_count)}-->
<!--{$total_page_str = $total_page|string_format:"%d"}-->
<!--{if $paging_data.current_page == &#39;&#39;}-->
    <!--{$paging_data.current_page = 1}-->
<!--{/if}-->
<!--{if $total_page}-->
    <!--{$prev = $paging_data.current_page - 1}-->
    <!--{$prev_str = $prev|string_format:"%d"}-->
    <!--{$next = $paging_data.current_page + 1}-->
    <!--{$next_str = $next|string_format:"%d"}-->

    <!--{if $add_link_to_edge}-->
        <!--{* 先頭ページへ *}-->
        <span><!--{if 1 <= $prev}--><a href="<!--{$paging_data.url|replace:&#39;%d&#39;:&#39;1&#39;}-->">&lt;&lt;</a><!--{else}-->&lt;&lt;<!--{/if}--></span>
    <!--{/if}-->

    <!--{if $pager_type == "a"}-->
        <!--{* タイプA *}-->

        <span <!--{if $prev < 1}-->style="visibility: hidden;"<!--{/if}-->><a href="<!--{$paging_data.url|replace:&#39;%d&#39;:$prev_str}-->">前へ</a></span>
        <span <!--{if $total_page < $next}-->style="visibility: hidden;"<!--{/if}-->><a href="<!--{$paging_data.url|replace:&#39;%d&#39;:$next_str}-->">次へ</a></span>

    <!--{elseif $pager_type == "b"}-->
        <!--{* タイプB *}-->

        <!--{* 前ページへ *}-->
        <span><!--{if 1 <= $prev}--><a href="<!--{$paging_data.url|replace:&#39;%d&#39;:$prev_str}-->">&lt;</a><!--{else}-->&lt;<!--{/if}--></span>

        <!--{* 各ページへ。前後3ページ *}-->
        <!--{$start_page = max(1, $paging_data.current_page - 3)}-->
        <!--{$end_page = min($total_page, $paging_data.current_page + 3)}-->
        <!--{for $page=$start_page to $end_page}-->
            <!--{$page_str = $page|string_format:"%d"}-->
            <span><!--{if $page != $paging_data.current_page}--><a href="<!--{$paging_data.url|replace:&#39;%d&#39;:$page_str}-->"><!--{$page}--></a><!--{else}--><!--{$page}--><!--{/if}--></span>
        <!--{/for}-->

        <!--{* 次ページへ *}-->
        <span><!--{if $next <= $total_page}--><a href="<!--{$paging_data.url|replace:&#39;%d&#39;:$next_str}-->">&gt;</a><!--{else}-->&gt;<!--{/if}--></span>

    <!--{/if}-->

    <!--{if $add_link_to_edge}-->
        <!--{* 最終ページへ *}-->
        <span><!--{if $next <= $total_page}--><a href="<!--{$paging_data.url|replace:&#39;%d&#39;:$total_page_str}-->">&gt;&gt;</a><!--{else}-->&gt;&gt;<!--{/if}--></span>
    <!--{/if}-->

<!--{/if}-->
<!--{if $debug}-->
    ■ページングデバッグ<br />
    件数:<!--{$paging_data.total_row_count}--><br />
    全ページ数:<!--{$total_page}--><br />
    表示ページ:<!--{$paging_data.current_page}--><br />
    URL:<!--{$paging_data.url}--><br />
    ページ内表示件数:<!--{$paging_data.page_row_count}--><br />
<!--{/if}-->
7
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10