PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] サポートライセンスの自動更新を停止したい場合はどうすればいいですか? を追加しました。
[よくあるご質問] 2025年1月からの価格改定後にエディションをアップグレードしたい場合はどうなりますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > テンプレート作成Tips > エンタープライズ検索のページ送りナビゲーションをカスタマイズする (実践編)

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">
<MTSetVar name="_pager_current" op="++">
    <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"$>&amp;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"$>&amp;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"$>&amp;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"$>&amp;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"$>&amp;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を指定した場合、表示範囲を限定せずにすべてのページ分のリンクを表示します。 変数「pager_range」に「0」を指定したナビゲーションのサンプル画像です。
-1または整数以外の文字を指定するとページ数を列挙せずに、指定した文字 (-1を指定した場合は「/」) を挟んで現在のページ数と総ページ数だけ表示します。例えば「-1」や「/」を指定すると「7/13」のように分数で表示し、「 of 」を指定すると「7 of 13」のように表示します。 変数「pager_range」に「-1」を指定したナビゲーションのサンプル画像です。 変数「pager_range」に「 of 」を指定したナビゲーションのサンプル画像です。
2要素の配列変数で前後の範囲を整数指定することも可能です。例えば「<$MTSetVar name="pager_range" value="1","3"$>」で前を1ページ分、次を3ページ分表示します。 配列変数「pager_range」に「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

Recent Entries