スタティックパブリッシングのページ分割機能を試す

公開

(2015年2月27日追記)改良したコードについての記事「Movable Typeで2ページ目以降を動的生成する場合のページングナビゲーション」を書きました。

ソースを示していますが、まだまだ引き続き実験中です。

MovableType.orgに掲載された記事、「Pagination for Static Templates」を参考にし、スタティックパブリッシングのページ分割機能を試してみました。

この機能は、Movable Type 4.3から追加されたものです。1ページ目は生成されたHTMLファイルを表示し、2ページ目以降はmt-search.cgiを用いて適宜分割されたページを表示するようです。

今回はテストとして、MovableType.org記事内のテンプレートのソースを参考にし、インデックステンプレートのメインページの分割を行ってみました。記事概要と他のページへ遷移するためのナビゲーションは、次のようなテンプレートを用いて表示できました。

<mt:Ignore><!-- ページに表示するエントリー数 --></mt:Ignore>
<$mt:Var name="entries_per_page" value="3"$>

<mt:If name="search_results">
 <mt:SearchResults>
 <$mt:Include module="ブログ記事の概要"$>
 </mt:SearchResults>
<mt:Else>
 <mt:Entries limit="$entries_per_page">
 <mt:Ignore><!-- 記事の出力 --></mt:Ignore>
 <$mt:Include module="ブログ記事の概要"$>
 </mt:Entries>
</mt:If>

<mt:Ignore><!-- ページ分割表示のためのURLクエリ文字列生成 --></mt:Ignore>
<mt:SetVarBlock name="search_link">
 <$mt:CGIPath$><$mt:SearchScript$>?IncludeBlogs=<$mt:BlogID$>
 &template_id=<$mt:BuildTemplateID$>
 &limit=<$mt:Var name="entries_per_page"$>
 &archive_type=Index
 &page=
</mt:SetVarBlock>
<mt:Ignore><!-- 空白除去 --></mt:Ignore>
<$mt:Var name="search_link" strip="" trim="1" setvar="search_link"$>

<mt:Ignore><!-- ページングナビ生成 --></mt:Ignore>
<mt:SetVarBlock name="pagination_navigation">
 <mt:If name="search_results">
 <mt:Ignore><!-- 動的ページ用ナビゲーション --></mt:Ignore>
 <mt:IfPreviousResults>
 <li class="previousPage"><a href="<$mt:PreviousLink$>" rel="prev" onclick="return swapContent(-1);"><< 前へ</a></li>
 </mt:IfPreviousResults>
 <mt:PagerBlock>
 <mt:IfCurrentPage>
 <li><em><$mt:Var name="__value__"$></em></li>
 <mt:Else>
 <li><a href="<$mt:PagerLink$>"><$mt:Var name="__value__"$></a></li>
 </mt:IfCurrentPage>
 </mt:PagerBlock>
 <mt:IfMoreResults>
 <li class="nextPage"><a href="<$mt:NextLink$>" rel="next" onclick="return swapContent();">次へ >></a></li>
 </mt:IfMoreResults>
 <mt:Else>
 <mt:Ignore><!-- 静的ページ用ナビゲーション --></mt:Ignore>
 <mt:If name="archive_template">
 <$mt:ArchiveCount setvar="total_entries"$>
 <mt:Else>
 <$mt:BlogEntryCount setvar="total_entries"$>
 </mt:If>
 <mt:Ignore><!-- 総エントリー数がページに表示するエントリー数を上回る場合はナビを生成 --></mt:Ignore>
 <mt:If name="total_entries" gt="$entries_per_page">
 <mt:Ignore><!-- Set the total number of entries to iterate through the pages. --></mt:Ignore>
 <mt:Ignore><!-- IF total entries divided by entries per page is a whole number. --></mt:Ignore>
 <mt:If name="total_entries" op="%" value="$entries_per_page" eq="0">
 <mt:Ignore><!-- Set total pages to total entries divided by entries per page. --></mt:Ignore>
 <$mt:Var name="total_entries" op="/" value="$entries_per_page" setvar="total_pages"$>
 <mt:Else>
 <mt:Ignore><!-- Get the remainder when dividing total entries by entries per page. --></mt:Ignore>
 <$mt:Var name="total_entries" op="%" value="$entries_per_page" setvar="remainder"$>
 <mt:Ignore><!-- Subtract remainder from total entries. --></mt:Ignore>
 <$mt:Var name="total_entries" op="-" value="$remainder" setvar="total_entries"$>
 <mt:Ignore><!-- Determine total pages by dividing total entries (minus remainder) by entries per page. --></mt:Ignore>
 <$mt:Var name="total_entries" op="/" value="$entries_per_page" setvar="total_pages"$>
 <mt:Ignore><!-- Add one page to handle the remainder of entries. --></mt:Ignore>
 <$mt:SetVar name="total_pages" op="++"$>
 </mt:If>
 
 <mt:For from="1" to="$total_pages" step="1">
 <mt:If name="__first__">
 <li><em><$mt:Var name="__index__"$></em></li>
 <mt:Else>
 <li><a href="<$mt:Var name="search_link"$><$mt:Var name="__index__"$>"><$mt:Var name="__index__"$></a></li>
 </mt:If>
 </mt:For>
 <mt:Ignore><!-- 「次へ」のリンク生成 --></mt:Ignore>
 <li class="nextPage"><a href="<$mt:Var name="search_link"$>2" rel="next">次へ >></a></li>
 </mt:If>
 </mt:If>
</mt:SetVarBlock>

<mt:Ignore><!-- ナビゲーションの出力 --></mt:Ignore>
<mt:If name="pagination_navigation">
 <ul class="pagination">
 <$mt:Var name="pagination_navigation"$>
 </ul>
</mt:If>

MovableType.orgのサンプルコードとの違い

  • 「Previous」「Next」を、「前へ」「次へ」と日本語で表示
  • 「ブログ記事の概要」表示部分を修正(mt-search.cgiで表示する際に上手く表示できなかったため)
  • ページナビゲーションを、ul要素などを用いてマークアップ