ページネーション

静的に生成されたオブジェクトの一覧ページに特定のパラメタを付与することで、動的ページネーションを実装できます。

ページネーション(スクリーンショット)

動的ページネーションを動作させるためには、パラメタ付きリクエストをダイナミック・パブリッシングの対象にしておく必要があります。

RewriteEngine On
RewriteCond %{QUERY_STRING} (=)
RewriteRule ^(.*)$ /powercmsx/html/pt-view.php

パラメタ

パラメタ 指定する値
_filter モデル名を指定します。
offset オフセット値(スキップする件数)を数字で指定します。
limit 表示する件数を数字で指定します。

このウェブサイトの「ドキュメント」のページで、動作を確認いただけます。

オブジェクト一覧を表示するブロックタグでセットされるテンプレート変数

テンプレート変数名
current_archive_url 現在のページのURL(この変数はすべてのページでセットされます)
object_count 条件に合致するオブジェクトの総数がセットされます
prev_offset 1つ前のページのオフセット値(スキップする件数)がセットされます
next_offset 1つ次のページのオフセット値(スキップする件数)がセットされます
current_page 現在のページがページネーションの何ページ目かを示す数字がセットされます

モデル「ページ」一覧のページネーションの例

この例では、1ページ目については静的生成、2ページ目以降は動的生成となります。

<!--ページ送り件数--><mt:setvar name="pagination_limit" value="25">
<mt:pages sort_by="published_on" direction="ascend" cols="title,published_on" include_workspaces="this" limit="$pagination_limit">
  <mt:if name="__first__">
  <ul>
  </mt:if>
    // 中略
  <mt:if name="__last__">
  </ul>
  <mt:include module="(Website) Pagination" pagination_limit="$pagination_limit" filter_model="page">
  </mt:if>
</mt:pages>

インクルード・モジュール「(Website) Pagination」

<mt:math eq="x / y" x="$object_count" y="$pagination_limit" setvar="division_result">
<mt:if name="division_result" like=".">
  <mt:setvar name="is_divisible" value="0">
<mt:else>
  <mt:setvar name="is_divisible" value="1">
</mt:if>
<mt:var name="object_count" setvar="count_for_pager">
<mt:if name="is_divisible">
  <mt:var name="object_count" decrement setvar="count_for_pager">
</mt:if>
<mt:if name="object_count" gt="$pagination_limit">
  <mt:for from="0" to="$count_for_pager" step="$pagination_limit">
    <mt:if name="__first__"><ul class="pagination justify-content-center">
      <mt:if name="request.offset">
      <mt:if name="prev_offset" gt="-1">
      <li class="page-item">
        <a class="page-link" href="<mt:var name="current_archive_url">?_filter=<mt:var name="filter_model">&amp;limit=<mt:var name="pagination_limit"><mt:if name="prev_offset">&amp;offset=<mt:var name="prev_offset"></mt:if>" aria-label="<mt:trans phrase="Previous">">
          <span aria-hidden="true">&lsaquo;</span>
          <span class="sr-only"><mt:trans phrase="Previous"></span>
        </a>
      </li>
      </mt:if>
      </mt:if>
    </mt:if>
    <li class="page-item">
    <mt:if name="__counter__" eq="$current_page">
      <strong class="page-link"><mt:var name="__counter__"></strong>
    <mt:else>
      <a class="page-link" href="<mt:var name="current_archive_url">?_filter=<mt:var name="filter_model">&amp;<mt:if name="__value__">offset=<mt:var name="__value__">&amp;</mt:if>limit=<mt:var name="pagination_limit">"><mt:var name="__counter__"></a>
    </mt:if>
    </li>
    <mt:if name="__last__">
      <mt:if name="current_page" eq="$offset_last">
        <mt:unless name="is_divisible">
          <mt:setvar name="has_next" value="1">
        </mt:unless>
      <mt:elseif name="current_page" le="$offset_last">
          <mt:setvar name="has_next" value="1">
      <mt:elseif name="current_page" eq="1">
          <mt:setvar name="has_next" value="1">
      </mt:if>
      <mt:if name="has_next">
      <li class="page-item">
        <a class="page-link" href="<mt:var name="current_archive_url">?_filter=<mt:var name="filter_model">&amp;limit=<mt:var name="pagination_limit">&amp;offset=<mt:if name="next_offset"><mt:var name="next_offset"><mt:else><mt:var name="pagination_limit"></mt:if>" aria-label="<mt:trans phrase="Next">">
          <span aria-hidden="true">&rsaquo;</span>
          <span class="sr-only"><mt:trans phrase="Next"></span>
        </a>
      </li>
      </mt:if>
      </ul>
    </mt:if>
  </mt:for>
</mt:if>