TopMovable Typeカスタマイズページ分割 > アーカイブページのページ分割 for Movable Type 4.1
2008年4月10日

アーカイブページのページ分割 for Movable Type 4.1

Posted at April 10,2008 12:03 AM
Category:[ページ分割]
Tag:[, , , ]

Movable Type 4.1 で、MTPaginate プラグインを用いたアーカイブページ(カテゴリーアーカイブ・月別アーカイブ等)のページ分割方法をご紹介します。
4.15でテンプレート構成が変わりそうなので、4.1(厳密には4.0~4.1)限定にしておきます。

ページ分割

このエントリーは「カテゴリーアーカイブと月別アーカイブのページ分割」を MT4.1 用に書き直したものです。

カスタマイズ手順には、PHP化の設定を含んでいます。PHP化の設定を行っていない場合は手順1~手順3を行った後、PHP化したメインページが正常に表示されることを確認してから、手順4以降のページ分割の設定を行ってください。

すでにPHP化が済んでいる場合は、手順5から開始してください。

1.ファイル・ディレクトリのパーミッションを変更

ファイルのパーミッションを変更するために、以下の作業を行ってください。
この作業を行うと、他のアーカイブページのファイルも同じパーミッションになるので、すべてのアーカイブのPHP化(拡張子を.phpにする)が必要です。

まず、mt-config.cgi を FTP ツールでダウンロードし、任意のエディタで開き、行末に以下の内容を追加してください。mt-config.cgi はアプリケーションディレクトリにあります。アプリケーションディレクトリとは、Movable Type をインストールしたディレクトリで、mt.cgi があるところです。

HTMLUmask 0072
DirUmask 0072
HTMLPerms 0777

修正後、mt-config.cgi を保存して、元のディレクトリにアップロードし、メインページを再構築してください。

この設定を行っておけば、出力されるメインページや他のHTMLファイルおよびディレクトリのパーミッションを常に705にします。パーミッションを 775 にする場合は、

HTMLUmask 0022
DirUmask 0022
HTMLPerms 0777

としてください。

2.拡張子の変更

ブログ管理画面の「設定」→「ブログの設定」→「公開」の一番下にある「アーカイブの拡張子」を html から php に変更して「変更を保存」をクリックします。

アーカイブの拡張子

3.XML宣言の修正

ページを XHTML文書、例えば XHTML1.0 として適合させている場合、前項と同じ画面の「テンプレートの内容」の1行目、またはテンプレートモジュールの「ヘッダー」の1行目(またはどこか)に、

<?xml version="1.0" encoding="<$MTPublishCharset$>"?>

という XML 宣言が記述されているケースがあります(記述されていなければこの項目はスキップしてください)。

PHP化を行うと、サーバではこのXML宣言の行をPHPスクリプトとして誤認識してしまい、次のようなPHPエラー

Parse error: parse error, unexpected T_STRING in ~(省略)~index.php on line 1

となるか、500エラーが発生するか、真っ白なページが表示される可能性があります。

このような場合、前述のXML宣言を下記の内容に置き換えてください(ご利用になる際、リストに含まれる改行はすべて除去してください。)。
なお、他のアーカイブページ等も PHP 化されていることを前提にしています。

<MTUnless name="system_template">
<? php echo('
</MTUnless>
<?xml version="1.0" encoding="utf-8"?>
<MTUnless name="system_template">
'); ? >
</MTUnless>

よく分からない場合や、ページが表示されない場合は、このカスタマイズを行う代わりに、XML宣言自体を削除してください。

4.プラグインのダウンロード

MT Extensions より MTPaginate をダウンロード(ページ上の方にある「Download」をクリック)。ファイルは任意のフォルダ(デスクトップ等)に保存します。

5.プラグインのインストール

注:この情報はバージョン1.28のものです。
ダウンロードしたファイルを解凍し、その中の MTPaginate ディレクトリを下記のディレクトリ構成になるように plugins ディレクトリに丸ごとアップロードします。

plugins/MTPaginate/lib/MTPaginate.pm
plugins/MTPaginate/MTPaginate.pl

ブログ管理画面の「システム」→「プラグイン」で MTPaginate が表示されれば、プラグインのインストールは完了です。

6.ページ分割の設定

ブログ管理画面より、「デザイン」→「テンプレート」→「アーカイブテンプレート」→「ブログ記事リスト」を選択し、青色部分のページ分割用タグを設定します。デフォルトテンプレート/配布テンプレート共通です。

一見複雑にみえますが <MTEntries> の直前と </MTEntries> の前後に加えるだけです。

すべてのアーカイブにページ分割を設定する場合

    :
<MTIf name="datebased_archive">
  <MTPaginate>
    <MTPaginateContent max_sections="5">
    <MTEntries>
<$MTEntryTrackbackData$>
<$MTInclude module="ブログ記事の概要"$>
<$MTPaginateSectionBreak$>
    </MTEntries>
    </MTPaginateContent>
    <MTPaginateIfMultiplePages>
    <p class="paginate">
      <MTPaginateIfPreviousPage_>
      <a href="<$MTPaginatePreviousPageLink$>">&#65308;</a>
      </MTPaginateIfPreviousPage_>
      <$MTPaginateNavigator style="links" format_all="All pages" place_all="after" separator=" | ">
      <MTPaginateIfNextPage_>
      <a href="<$MTPaginateNextPageLink$>">&#65310;</a>
      </MTPaginateIfNextPage_>
    </p>
    </MTPaginateIfMultiplePages>
  </MTPaginate>
<MTElse>
  <MTPaginate>
    <MTPaginateContent max_sections="5">
    <MTEntries limit="auto">
<$MTEntryTrackbackData$>
<$MTInclude module="ブログ記事の概要"$>
<$MTPaginateSectionBreak$>
    </MTEntries>
    </MTPaginateContent>
    <MTPaginateIfMultiplePages>
    <p class="paginate">
      <MTPaginateIfPreviousPage_>
      <a href="<$MTPaginatePreviousPageLink$>">&#65308;</a>
      </MTPaginateIfPreviousPage_>
      <$MTPaginateNavigator style="links" format_all="All pages" place_all="after" separator=" | ">
      <MTPaginateIfNextPage_>
      <a href="<$MTPaginateNextPageLink$>">&#65310;</a>
      </MTPaginateIfNextPage_>
    </p>
    </MTPaginateIfMultiplePages>
  </MTPaginate>
</MTIf>
    :

日付ベースのアーカイブのみページ分割を設定する場合

    :
<MTIf name="datebased_archive">
  <MTPaginate>
    <MTPaginateContent max_sections="5">
    <MTEntries>
<$MTEntryTrackbackData$>
<$MTInclude module="ブログ記事の概要"$>
<$MTPaginateSectionBreak$>
    </MTEntries>
    </MTPaginateContent>
    <MTPaginateIfMultiplePages>
    <p class="paginate">
      <MTPaginateIfPreviousPage_>
      <a href="<$MTPaginatePreviousPageLink$>">&#65308;</a>
      </MTPaginateIfPreviousPage_>
      <$MTPaginateNavigator style="links" format_all="All pages" place_all="after" separator=" | ">
      <MTPaginateIfNextPage_>
      <a href="<$MTPaginateNextPageLink$>">&#65310;</a>
      </MTPaginateIfNextPage_>
    </p>
    </MTPaginateIfMultiplePages>
  </MTPaginate>
<MTElse>
    <MTEntries limit="auto">
<$MTEntryTrackbackData$>
<$MTInclude module="ブログ記事の概要"$>
    </MTEntries>
</MTIf>
    :

日付ベース以外のアーカイブのみページ分割を設定する場合

    :
<MTIf name="datebased_archive">
    <MTEntries>
<$MTEntryTrackbackData$>
<$MTInclude module="ブログ記事の概要"$>
    </MTEntries>
<MTElse>
  <MTPaginate>
    <MTPaginateContent max_sections="5">
    <MTEntries limit="auto">
<$MTEntryTrackbackData$>
<$MTInclude module="ブログ記事の概要"$>
<$MTPaginateSectionBreak$>
    </MTEntries>
    </MTPaginateContent>
    <MTPaginateIfMultiplePages>
    <p class="paginate">
      <MTPaginateIfPreviousPage_>
      <a href="<$MTPaginatePreviousPageLink$>">&#65308;</a>
      </MTPaginateIfPreviousPage_>
      <$MTPaginateNavigator style="links" format_all="All pages" place_all="after" separator=" | ">
      <MTPaginateIfNextPage_>
      <a href="<$MTPaginateNextPageLink$>">&#65310;</a>
      </MTPaginateIfNextPage_>
    </p>
    </MTPaginateIfMultiplePages>
  </MTPaginate>
</MTIf>
    :

日付ベース以外のアーカイブのみページ分割を設定する場合、MTEntries タグにある

limit="auto"

は削除した方がいいでしょう。
limit モディファイアに auto を設定した場合、表示するブログ記事数を、「設定」→「ブログの設定」→「ブログ記事」→「ブログ記事の表示数」にあわせます。

7.表示ブログ記事数の設定

リスト中の、

<MTPaginateContent max_sections="5">
<MTEntries>

にある

max_sections="5"

は、1ページに表示する最大ブログ記事数を設定します。ここでは5つのブログ記事表示する設定にしています。

ブログ記事数が30ある場合、max_sections が1ページに5ブログ記事ずつ表示する設定になっているので、ページは計6ページに分割して表示することになります。

8.スタイルの設定

赤色の p 要素はスタイルを設定するために付与しています。必要に応じて下記のようなCSSをスタイルシートに追加してください。

.paginate {
    text-align: center;
    font-size: 9px;
}

設定が完了したら保存し、再構築します。
これで各アーカイブページがページ分割されていることを確認してください。

9.ページリンクの設定

ページリンクは冒頭のスクリーンショットのように表示され、各ページへのリンクと現在のページから前後のページへジャンプするのリンク、および全ページを一括表示するリンクがあります。

各ページのリンクの現在のページはテキスト表示になります。また一番最初のページは「<」を表示せず、最後のページは「>」を表示しません。

上のサンプルではページリンクをページの一番下に表示するように配置していますが、ページの上に表示したい場合は、

     :
<MTPaginate>
<MTPaginateIfMultiplePages>
<p class="paginate">
<MTPaginateIfPreviousPage_>
<a href="<$MTPaginatePreviousPageLink$>">&#65308;</a>
</MTPaginateIfPreviousPage_>
<$MTPaginateNavigator style="links" format_all="All pages" place_all="after" separator=" | ">
<MTPaginateIfNextPage_>
<a href="<$MTPaginateNextPageLink$>">&#65310;</a>
</MTPaginateIfNextPage_>
</p>
</MTPaginateIfMultiplePages>
    <MTPaginateContent max_sections="5">
    <MTEntries>
<$MTEntryTrackbackData$>
<$MTInclude module="ブログ記事の概要"$>
<$MTPaginateSectionBreak$>
    </MTEntries>
    </MTPaginateContent>
  </MTPaginate>
     :

と、青色部分を追加してください(すべてのアーカイブに適用させる場合は、上のリストを日付アーカイブベースのサブテンプレートと、それ以外のサブテンプレートの2ヶ所に設定してください)。上下両方にページリンクを付与することも可能です。

注意点としては、ページリンクを必ず MTPaginate タグと MTPaginateContent タグの間に設定してください。誤って MTPaginate の上に設定すると再構築エラーになり、MTPaginateContent の下に貼り付けると再構築はできますが、何も表示されなくなりますのでご注意ください。

2008.04.25
カスタマイズ手順に PHP 化の手順を追加し、手順の順番を見直しました。

Posted by yujiro
関連記事
人気エントリー
トラックバックURL


コメント

お世話になっています。
カテゴリーアーカイブと月別アーカイブのページ分割で
テンプレのどこに記述したらよいか質問させて頂いたすずしろです。

こちらを参考に、無事にページ分割させることができました。
本当にありがとうございました。

[1] Posted by すずしろ : April 11, 2008 2:29 PM

>すずしろさん
こんばんは。
ご連絡ありがとうございました。
うまくできたようでよかったです。
ではでは!

[2] Posted by yujiro Author Profile Page : April 13, 2008 3:17 AM

ちょうどこういった分割プラグイン探してました!
ありがとうございます。

チュートリアルだと  All Pages | 1 | 2 | 3 | 4 | 5 |
というすべてのページが表示されますが

こんな感じにもできますでしょうか?

All Pages ... 3 | 4 | 5 | 6 | 7 ...

セレクトされた番号に沿って前後のページ番号が省かれページ数が多くても
シンプルに表示できる方法があれば教えていただけないでしょうか。。。

[3] Posted by AKIKO : April 13, 2008 1:33 PM

>AKIKOさん
こんにちは。
ご質問の件ですが、デフォルトではそのような機能がありません。
時間をみてカスタマイズしてみますので、うまくできるようであれば別途エントリー致します。
気長にお待ちください。
それではよろしくお願い致します。

[4] Posted by yujiro Author Profile Page : April 16, 2008 5:19 PM
コメントする

*必須



太字 イタリック アンダーライン ハイパーリンク 引用

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Entries of this Category
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
BlogPeople
Now loading...
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.1
 
List Me!