商品一覧にページ番号を付ける

Paginator や pager と呼ばれるモノがなぜか公式の機能としてなかったので作ってみた。

<!-- 1ページに表示する商品数(テンプレートの設定に合わせる) -->
<{assign var='products_per_page' value=16}>

<!-- 必要な変数を設定 -->
<{assign var='current_page' value=1}>
<{if $productlist_prev_page != ''}>
	<{assign var='productlist_page_url' value=$productlist_prev_page|regex_replace:'|page=\d+|':'page='}>
	<{assign var='current_page' value=$productlist_prev_page|regex_replace:'|^.*page=(\d+).*|':'$1'}>
	<{assign var='current_page' value=$current_page+1}>
<{elseif $productlist_next_page != ''}>
	<{assign var='productlist_page_url' value=$productlist_next_page|regex_replace:'|page=\d+|':'page='}>
	<{assign var='current_page' value=$productlist_next_page|regex_replace:'|^.*page=(\d+).*|':'$1'}>
	<{assign var='current_page' value=$current_page-1}>
<{/if}>
<{assign var='page_max' value=0}>
<{assign var='tmp_page_count' value=$productlist_num}>
<{section name=page start=1 loop=$productlist_num}>
	<{if $tmp_page_count > 0}>
		<{assign var='page_max' value=$page_max+1}>
	<{/if}>
	<{assign var='tmp_page_count' value=$tmp_page_count-$products_per_page}>
<{/section}>

<!-- ここから表示 -->
<div class="pager">
	<{if $productlist_prev_page != ""}>
		<a href="<{$productlist_prev_page}>">&lt; 前ページ</a>
	<{/if}>
	<{section name=page start=1 loop=$page_max+1}>
		<{assign var='tmp_page' value=$smarty.section.page.index}>
		<{if $current_page == $tmp_page}>
			<span class="current"><{$tmp_page}></span>
		<{else}>
			<a href="<{$productlist_page_url}><{$tmp_page}>"><{$tmp_page}></a>
		<{/if}>
	<{/section}>
	<{if $productlist_next_page != ""}>
		<a href="<{$productlist_next_page}>">次ページ &gt;</a>
	<{/if}>
</div>