12月 03

MTPaginate

Tag: MovableType, phpTOSHI @ 16:13:58

折角phpを入れたので、前に見て入れようかと想ってたMTPaginateを導入してみる。長くなりがちな月別やカテゴリのアーカイブを分割してしまおう。

まずはMTのアーカイブページでphpを使えるようにしなければならない。ぐぐってよく出てくるのはアーカイブの拡張子を.phpに変更する手法だけど、いちいちファイル名を変えるようなマンドイことはしたくないのでいっそ .html の拡張子で使えるように.htaccessで設定してしまう。レンタル鯖だと設定できない人も沢山いそうなので万人にはお勧めできないけど。

AddType application/x-httpd-php .html

では本命のMTPaginateを導入。pluginをとってきて入れるだけ。後はテンプレに必要な記述を、MTPaginateのWebを参考に設定する。今回はsectionで分けることに(というかwordやbyteで切られても困る)。sectionで分けるといっても、私の場合はスタイルシートの関係から、日毎に区切らないとずれてしまうのでそれを考慮する。例えばカテゴリアーカイブの場合。

<MTPaginate>

<MTPaginateIfMultiplePages>
<div class="mtPages">
  <h2>Pages…</h2>

  <p>
    <span class="next">
      <MTPaginateIfFirstPage_>
        &#9665;
      </MTPaginateIfFirstPage_>
      <MTPaginateIfMultiplePages>
      <MTPaginateIfLastPage_>
        <a href="<$MTPaginatePreviousPageLink$>">&#9664;</a>
      </MTPaginateIfLastPage_>
      <MTPaginateIfMiddlePage_>
        <a href="<$MTPaginatePreviousPageLink$>">&#9664;</a>
      </MTPaginateIfMiddlePage_>
      <MTPaginateIfAllPages_>
        &#9665;
      </MTPaginateIfAllPages_>
    </span>
    <$MTPaginateNavigator format="&lt;span class=&quot;text&quot;&gt;%d&lt;/span&gt;"
      format_all="&lt;span class=\&quot;text\&quot;&gt;&nbsp;All&nbsp;&lt;/span&gt;"
      format_current="&lt;span class=\&quot;current\&quot;&gt;%d&lt;/span&gt;">
    </MTPaginateIfMultiplePages>
    <span class="next">
      <MTPaginateIfFirstPage_>
        <a href="<$MTPaginateNextPageLink$>">&#9654;</a>
      </MTPaginateIfFirstPage_>
      <MTPaginateIfLastPage_>
        &#9655;
      </MTPaginateIfLastPage_>
      <MTPaginateIfMiddlePage_>
        <a href="<$MTPaginateNextPageLink$>">&#9654;</a>
      </MTPaginateIfMiddlePage_>
      <MTPaginateIfAllPages_>
        &#9655;
      </MTPaginateIfAllPages_>
    </span>
  </p>
</div>
</MTPaginateIfMultiplePages>

<MTPaginateContent max_sections="10">
<MTEntries>

<MTDateHeader>
<div class="mtHeading2">
  <h2><$MTEntryDate format="%x"$></h2>
</MTDateHeader>

<MTDateFooter>
</div>
<$MTPaginateSectionBreak$>
</MTDateFooter>

</MTEntries>
</MTPaginateContent>

</MTPaginate>

重要なのはMTPaginateIfMultiplePagesタグの中の設定と、sectionを区切る場所。
MTPaginateIfMultiplePagesタグでページが複数分割される時にページ表示を出す。各ページによって両端に出す三角形の色を変えたり、スタイルシート用にclassつけてるだけ。
MTPaginateContentタグで10sectionを1ページにして、分割する為のindicateになるMTPaginateSectionBreakタグをMTDateFooterタグの中に入れることで、MTPaginate的には日毎にsectionが分割される。ので、実際の表示も、同じ日に複数該当するエントリがあっても同じ1sectionと見られるようにして10section分表示。

…と書いたけど、上記の話が全部分かる人はちゃんと自分でタグ書いてそう。これコピペして動かなくても知りません。

コメントをどうぞ