2024年06月13日
エンタープライズ検索のページ送りナビゲーションをカスタマイズする (実践編)
以前に静的ページ分割機能のページ送りナビゲーションをカスタマイズする方法の記事を公開しましたが、同様のカスタマイズをエンタープライズ検索のページ送りでも実現する方法を紹介いたします。
静的ページ分割機能のページ送りをカスタマイズしたい場合は上記の記事を参照してください。
ここでは現在のページの前後数ページ分と、始まりと終わりの数ページ分についてリンクし、それらの範囲外を省略表示するページ送りナビゲーションの例を紹介します。
次のテンプレートをコピーして、エンタープライズ検索のページ送りを出力するテンプレートと置き換えてください。
<MTEstraierMeta>
<MTVar name="__limit__" encode_html="1" setvar="search_limit">
<MTVar name="__offset__" encode_html="1" setvar="search_offset">
</MTEstraierMeta>
<MTEstResultPager strip_linefeeds="1">
<MTEstResultPagerHeader>
<MTVar name="search_limit" setvar="limit">
<MTVar name="search_offset" setvar="offset">
<MTVar name="offset" op="/" value="$limit" setvar="_pager_current">
<MTVar name="_pager_current" regex_replace="/\.\d+$/","" setvar="_pager_current">
<MTEstResultCount setvar="hit">
<MTVar name="hit" op="/" value="$limit" setvar="_pager_total">
<MTIf name="hit" op="mod" value="$limit">
<MTVar name="_pager_total" regex_replace="/\.\d+$/","" setvar="_pager_total">
<MTSetVar name="_pager_total" op="++">
</MTIf>
<$MTSetVar name="_pager_fraction" value=""$>
<$MTSetVar name="_pager_i" value="0"$>
<MTLoop name="pager_range">
<MTIf name="__first__">
<$MTVar name="count(pager_range)" setvar="_pager_i"$>
<MTIf name="_pager_i" lt="2">
<$MTSetVar name="_pager_i" value="0"$>
</MTIf>
</MTIf>
<MTIf name="__counter__" le="2">
<MTUnless name="__value__" like='/\A(?:0|[1-9]\d*)\z/'>
<$MTSetVar name="_pager_i" value="0"$>
</MTUnless>
</MTIf>
<MTIf name="__last__">
<MTIf name="_pager_i">
<$MTVar name="pager_range[0]" setvar="_pager_i"$>
<$MTVar name="_pager_current" op="-" value="$_pager_i" setvar="_pager_range_start"$>
<$MTVar name="_pager_total" op="-" value="$_pager_i" setvar="_pager_end_before"$>
<$MTVar name="pager_range[1]" setvar="_pager_i"$>
<$MTVar name="_pager_current" op="+" value="$_pager_i" setvar="_pager_range_stop"$>
<$MTVar name="_pager_i" op="++" setvar="_pager_begin_after"$>
<$MTVar name="pager_range[2]" setvar="_pager_fraction"$>
<$MTSetVar name="_pager_i" value="1"$>
</MTIf>
</MTIf>
</MTLoop>
<MTUnless name="_pager_i">
<$MTVar name="pager_range" _default="5" setvar="_pager_i"$>
<MTIf name="_pager_i" like='/\A-?[1-9]\d*\z/'>
<MTIf name="_pager_i" gt="0">
<$MTSetVar name="_pager_i" op="--"$>
<$MTVar name="_pager_i" op="/" value="2" regex_replace='/\..*/','' setvar="_pager_j"$>
<$MTVar name="_pager_current" op="-" value="$_pager_j" setvar="_pager_range_start"$>
<$MTVar name="_pager_total" op="-" value="$_pager_j" setvar="_pager_end_before"$>
<MTIf name="_pager_i" op="%" value="2">
<$MTSetVar name="_pager_j" op="++"$>
</MTIf>
<$MTVar name="_pager_current" op="+" value="$_pager_j" setvar="_pager_range_stop"$>
<$MTVar name="_pager_j" op="++" setvar="_pager_begin_after"$>
<MTElse lt="0">
<$MTSetVar name="_pager_fraction" value="/"$>
</MTIf>
<MTElse>
<$MTSetVar name="_pager_fraction" value="$_pager_i"$>
</MTIf>
</MTUnless>
<ul class="<$MTVar name="pager_classname" _default="pager"$>">
<$MTSetVar name="_pager_show_first" value="0"$>
<MTUnless name="pager_show_first" eq="0">
<MTUnless name="pager_show_first" eq="2">
<$MTSetVar name="_pager_show_first" value="1"$>
<MTElse>
<MTIfEstResultPrev>
<$MTSetVar name="_pager_show_first" value="2"$>
</MTIfEstResultPrev>
</MTUnless>
</MTUnless>
<MTIf name="_pager_show_first">
<li class="<$MTVar name="pager_first_classname" _default="first"$>"><MTIfEstResultPrev
><a href="<$mt:var name="search_params"$>&offset="1"><MTElse><span></MTIfEstResultPrev
><$MTVar name="pager_first_label" _default="最初" escape="html"$><MTIfEstResultPrev
></a><MTElse></span></MTIfEstResultPrev></li>
</MTIf>
<$MTSetVar name="_pager_show_prev" value="0"$>
<MTUnless name="pager_show_prev" eq="0">
<MTUnless name="pager_show_prev" eq="2">
<$MTSetVar name="_pager_show_prev" value="1"$>
<MTElse>
<MTIfEstResultPrev>
<$MTSetVar name="_pager_show_prev" value="2"$>
</MTIfEstResultPrev>
</MTUnless>
</MTUnless>
<MTIf name="_pager_show_prev">
<li class="<$MTVar name="pager_prev_classname" _default="prev"$>"><MTIfEstResultPrev
><a href="<$mt:var name="search_params"$>&offset=<$mt:var name="__prevoffset__" escape="html"$>"><MTElse><span></MTIfEstResultPrev
><$MTVar name="pager_prev_label" _default="前" escape="html"$><MTIfEstResultPrev
></a><MTElse></span></MTIfEstResultPrev></li>
</MTIf>
<MTIf name="_pager_fraction">
<li class="<$MTVar name="pager_fraction_classname" _default="fraction index"
$>"><span><$MTVar name="_pager_current"
$><$MTVar name="_pager_fraction" escape="html"$><$MTVar name="_pager_total"$></span></li>
</MTIf>
</MTEstResultPagerHeader>
<MTUnless name="_pager_fraction">
<$MTVar name="__counter__" setvar="_pager_counter"$>
<$MTSetVar name="_pager_in_range" value="0"$>
<$MTSetVar name="_pager_ellipsis" value="0"$>
<MTIf name="_pager_counter" le="$_pager_begin_after">
<$MTSetVar name="_pager_in_range" value="3"$>
<MTElse gt="$_pager_end_before">
<$MTSetVar name="_pager_in_range" value="4"$>
<MTElse eq="$_pager_end_before">
<$MTSetVar name="_pager_in_range" value="5"$>
<MTIf name="_pager_counter" op="-" value="1" gt="$_pager_range_stop">
<$MTSetVar name="_pager_ellipsis" value="1"$>
<MTElse le="$_pager_range_start">
<MTIf name="_pager_counter" gt="$_pager_begin_after">
<$MTSetVar name="_pager_ellipsis" value="2"$>
</MTIf>
</MTIf>
<MTElse ge="$_pager_range_start">
<MTIf name="_pager_counter" eq="$_pager_range_start">
<MTIf name="_pager_counter" op="-" value="1" ne="$_pager_begin_after">
<$MTSetVar name="_pager_ellipsis" value="3"$>
</MTIf>
</MTIf>
<MTIf name="_pager_counter" le="$_pager_range_stop">
<$MTSetVar name="_pager_in_range" value="6"$>
</MTIf>
</MTIf>
<MTIf name="_pager_ellipsis">
<li class="<$MTVar name="pager_ellipsis_classname" _default="ellipsis index"
$>"><span><$MTVar name="pager_ellipsis_label" _default="..." escape="html"$></span></li>
</MTIf>
<MTIf name="_pager_in_range">
<MTIf name = __current__>
<li class="<$MTVar name="pager_current_classname" _default="current index"
$>"><span><$MTVar name="_pager_counter"$></span></li>
<MTElse>
<li class="<$MTVar name="pager_index_classname" _default="index"
$>"><a href="<$mt:var name="search_params"$>&offset=<MTVar name="sparams"><MTVar
name="__offset__">"><$MTVar name="_pager_counter"$></a></li>
</MTIf>
</MTIf>
</MTUnless>
<MTEstResultPagerFooter>
<$MTSetVar name="_pager_show_next" value="0"$>
<MTUnless name="pager_show_next" eq="0">
<MTUnless name="pager_show_next" eq="2">
<$MTSetVar name="_pager_show_next" value="1"$>
<MTElse>
<MTIfEstResultNext>
<$MTSetVar name="_pager_show_next" value="2"$>
</MTIfEstResultNext>
</MTUnless>
</MTUnless>
<MTIf name="_pager_show_next">
<li class="<$MTVar name="pager_next_classname" _default="next"$>"><MTIfEstResultNext
><a href="<$mt:var name="search_params"$>&offset=<$mt:var name="__nextoffset__" escape="html"$>">><MTElse><span></MTIfEstResultNext
><$MTVar name="pager_next_label" _default="次" escape="html"$><MTIfEstResultNext
></a><MTElse></span></MTIfEstResultNext></li>
</MTIf>
<$MTSetVar name="_pager_show_last" value="0"$>
<MTUnless name="pager_show_last" eq="0">
<MTUnless name="pager_show_last" eq="2">
<$MTSetVar name="_pager_show_last" value="1"$>
<MTElse>
<MTIfEstResultNext>
<$MTSetVar name="_pager_show_last" value="2"$>
</MTIfEstResultNext>
</MTUnless>
</MTUnless>
<li class="<$MTVar name="pager_last_classname" _default="last"$>"><MTIfEstResultNext
><a href="<$mt:var name="search_params"$>&offset=<$MTEstResultCount escape="html"$>"><MTElse><span></MTIfEstResultNext
><$MTVar name="pager_last_label" _default="最後" escape="html"$><MTIfEstResultNext
></a><MTElse></span></MTIfEstResultNext></li>
</ul>
</MTEstResultPagerFooter>
</MTEstResultPager>
このテンプレートでは、必要に応じてテンプレート変数によってページ送りナビゲーションの表示を変更できるようにしています。すべて既定値のある任意のオプション変数なので、テンプレートを貼り付けるだけで基本的なページ送りナビゲーションが出力でき、下記のテンプレート変数を変更するとことで表示内容をコントールできます。
静的ページのカスタマイズと同じテンプレート変数で同様のコントロールが行えるようにしております。
- pager_range
- ナビゲーションで現在のページの前後に表示する項目数を整数で指定します。奇数を指定した場合、次のページを優先して1ページ分多く表示します。
既定値は「5
」で、現在のページと前後2ページ分のリンクを表示します。
0
を指定した場合、表示範囲を限定せずにすべてのページ分のリンクを表示します。
-1
または整数以外の文字を指定するとページ数を列挙せずに、指定した文字 (-1
を指定した場合は「/
」) を挟んで現在のページ数と総ページ数だけ表示します。例えば「-1
」や「/
」を指定すると「7/13
」のように分数で表示し、「of
」を指定すると「7 of 13
」のように表示します。
2要素の配列変数で前後の範囲を整数指定することも可能です。例えば「<$MTSetVar name="pager_range" value="1","3"$>
」で前を1ページ分、次を3ページ分表示します。 - pager_show_first
0
を指定すると「最初」のナビゲーション項目を非表示にします。2
を指定すると最初のページでは「最初」のナビゲーション項目を非表示にします。- pager_show_last
0
を指定すると「最後」のナビゲーション項目を非表示にします。2
を指定すると最後のページでは「最後」のナビゲーション項目を非表示にします。- pager_show_prev
0
を指定すると「前」のナビゲーション項目を非表示にします。2
を指定すると最初のページでは「前」のナビゲーション項目を非表示にします。- pager_show_next
0
を指定すると「次」のナビゲーション項目を非表示にします。2
を指定すると最後のページでは「次」のナビゲーション項目を非表示にします。- pager_first_label
- 最初のページに移動するためのナビゲーション項目に表示する文字を指定します。既定値は「
最初
」です。 - pager_last_label
- 最後のページに移動するためのナビゲーション項目に表示する文字を指定します。既定値は「
最後
」です。 - pager_prev_label
- 前のページに移動するためのナビゲーション項目に表示する文字を指定します。既定値は「
前
」です。 - pager_next_label
- 次のページに移動するためのナビゲーション項目に表示する文字を指定します。既定値は「
次
」です。 - pager_ellipsis_label
- 表示範囲外を省略表記する文字を指定します。既定値は「
...
」です。 - pager_classname
- ナビゲーション用 ul 要素の class 属性値です。既定値は「
pager
」です。 - pager_prev_classname
- 前のページに移動するための li 要素の class 属性値です。既定値は「
prev
」です。 - pager_next_classname
- 次のページに移動するための li 要素の class 属性値です。既定値は「
next
」です。 - pager_current_classname
- 現在のページに関する li 要素の class 属性値です。既定値は「
current index
」です。 - pager_index_classname
- 指定ページに移動するための li 要素の class 属性値です。既定値は「
index
」です。 - pager_ellipsis_classname
- 表示範囲外を省略する li 要素の class 属性値です。既定値は「
ellipsis index
」です。 - pager_fraction_classname
- 変数「pager_range」の指定で分数表示する li 要素の class 属性値です。既定値は「
fraction index
」です。 - pager_first_classname
- 最初のページに移動するための li 要素の class 属性値です。既定値は「
first
」です。 - pager_last_classname
- 最後のページに移動するための li 要素の class 属性値です。既定値は「
last
」です。
PowerCMS に同梱されているテーマではテンプレートの見通しや解りやすさを優先しているため、このようなテンプレートは採用していません。
- カテゴリー
- テンプレート作成Tips
コメントを投稿する