MovableTypeにおいて問題となる点として、アーカイブページ(カテゴリや日付)です。
エントリ数が多くなると1枚のページで全ての属するエントリが表示されてしまい、ページ表示がかなり遅くなってしまいますし、稀にブラウザが落ちてしまうこともあります。
現在では「MTPagenate」というページ分割をしてくれるプラグインがあって、これを利用すれば実現はできるのですが、PHPが動く環境でないとダメという制約があります。そもそもPHPが動くのならダイナミックページ機能を使えばいいわけですし、タグの書き方もそこそこ手間がかかってしまいます。
ここでひとつ、
静的なHTMLページで画面分割できてページ送り機能が使えれば問題は解決できるのでは??
という思いがありまして、このようなプラグインを作りました。
- 概要・注意事項
静的なHTMLページを分割して生成、ページ送り機能をつけられるようにします。
まだ開発途中ですので利用においては各自の責任のもとに利用していただき、また、利用にあたってはデータのバックアップ等を行うようにしてください。現状では以下のアーカイブタイプのみに対応しています。
- カテゴリアーカイブ
- 日付アーカイブ
- 週別アーカイブ
- 月別アーカイブ
また、MovableTypeのバージョンは3.3以上となっておりますのでご注意ください。
- ダウンロード
こちらのダウンロードページからダウンロードしてください。
- インストール
MovableTypeインストールディレクトリ内の「plugins」ディレクトリにダウンロードしたファイルを展開してください。「ArchivePage」というディレクトリ名で展開されます。
- 利用方法
各ブログの設定画面にあります「プラグイン」リンクを選択しますと、「ArchivePage」が表示されていると思います。表示されていない場合は正常にインストールができていませんのでインストール場所等確認してください。
「ArchivePage」の「設定を表示」リンクをクリックしますと、各アーカイブページでの表示させたいエントリ数設定ができますので適切な値を入力してください。0を設定した場合はページ分割はされません。次に各アーカイブテンプレートページを「5. タグ一覧」を参照して書き込んでください。「MTArchive...」のタグなどと似たような感じで利用ができるようにしてあります。また、「6. サンプル」も参照してください。
- タグ一覧
- MTIfArchivePage
- テンプレートがページ分割設定されているときの条件タグです。
- MTArchivePageFirst
- ページ分割した際の最初のページ情報を出力する条件タグです。
- MTArchivePagePrevious
- ページ分割した際の前のページ情報を出力する条件タグです。
- MTArchivePageNext
- ページ分割した際の次のページ情報を出力する条件タグです。
- MTArchivePageLast
- ページ分割した際の最後のページ情報を出力する条件タグです。
- MTArchivePageLink
- 分割したページへのリンクを出力するタグです。
「MTArchivePageFirst」、「MTArchivePagePrevious」、「MTArchivePageNext」、「MTArchivePageLast」内で利用できます。 - MTArchivePageTitle
- 分割したページのタイトルを出力するタグです。
「MTArchivePageFirst」、「MTArchivePagePrevious」、「MTArchivePageNext」、「MTArchivePageLast」内で利用できます。 - text="ラベル文字列"
- 出力するタイトルを設定できます。
- MTArchivePager
- ページ送りリンクを出力するタグです。
- class="スタイルクラス名"
- size="ページ表示数"
- separator="区切り文字"
- サンプル
スタイルシート、テキストなどの設定はご自身の環境にあわせてください。<MTIfArchivePage>
<div class="pagelinks">
<MTArchivePageFirst>
<a href="<$MTArchivePageLink$>"><$MTArchivePageTitle text="最初"$></a>
</MTArchivePageFirst>
<MTArchivePagePrevious>
<a href="<$MTArchivePageLink$>"><$MTArchivePageTitle text="前のページ"$></a>
</MTArchivePagePrevious>
<$MTArchivePager class="blink"$>
<MTArchivePageNext>
<a href="<$MTArchivePageLink$>"><$MTArchivePageTitle text="次のページ"$></a>
</MTArchivePageNext>
<MTArchivePageLast>
<a href="<$MTArchivePageLink$>"><$MTArchivePageTitle text="最後"$></a>
</MTArchivePageLast>
</div>
</MTIfArchivePage>上記のようにしますと、以下のようなHTMLが展開されるはずです。
<div class="pagelinks">
<a href="アーカイブURL/index.html">最初</a>
<a href="アーカイブURL/index.html" class="blink">1</a>,
<a href="アーカイブURL/index_1.html">2</a>,
<a href="アーカイブURL/index_2.html">3</a>
<a href="アーカイブURL/index_1.html">次のページ</a>
<a href="アーカイブURL/index_2.html">最後</a>
</div>





MT3.3で使用させていただいています。
分割はされているのですが、
「ArchivePage」は、次の理由で使えません
Can't use an undefined value as an ARRAY reference at ***/plugins/ArchivePage/ArchivePage.pl line 55.
と表示されます。どうしたらいいのでしょうか?
ken様
こちらにて現在公開しているバージョンのものをMT-3.33で検証したところ、特に指摘のエラーは発生しませんでした。
ですが、以下のことが考えられるかと思いますので設定を確認していただけますでしょうか。
1. プラグイン設定
「ブログを選択→設定→プラグイン→ArchivePageの設定を表示」から、各アーカイブの表示件数設定にて数値は1以上が入っていますでしょうか。
2. アーカイブ設定
「ブログを選択→設定→公開」から、アーカイブ・マッピングにて、ファイル名の設定に特殊なことはしていますでしょうか。
また、エントリー/日別/週別/月別/カテゴリー以外でマッピングを設定していますでしょうか。
もし問題がないようでしたら設定内容を教えていただけますでしょうか。
なおエラーの詳細についてですが、本プラグインでは再構築を行う際、コールバック関数としてプラグイン内で定義されている関数を呼び出します。
この関数の引数は構築するファイルの情報を受け取るのですが、引数情報内のファイル名情報について参照ができていない模様です。
ファイル名情報以外の情報は読み取れていますので、MovableTypeから引数として渡される情報に何かしらの問題があると思っております。
MovableTypeの詳細なバージョンなども教えていただければと思います。バージョンはログイン画面の下部フッタ部分に小さい文字ですが表示されています。
ご回答有難う御座います。
MovableTypeの詳細なバージョンはMT-3.33-jaです。
1. プラグイン設定
「ブログを選択→設定→プラグイン→ArchivePageの設定を表示」から、各アーカイブの表示件数設定にて数値は1以上が入っていますでしょうか。
>カテゴリアーカイブのみ分割したいので日別/週別/月別は0の設定です。
エントリー/カテゴリー/日付アーカイブ(月別)のみ出力しています。
エントリー/日付アーカイブ(月別)のテンプレートにはタグを記述していません。
2. アーカイブ設定
「ブログを選択→設定→公開」から、アーカイブ・マッピングにて、ファイル名の設定に特殊なことはしていますでしょうか。
また、エントリー/日別/週別/月別/カテゴリー以外でマッピングを設定していますでしょうか。
>いいえしていません。
アーカイブ・マッピング、アーカイブ種類にはエントリー/月別/カテゴリーにチェックが入っています。
宜しくお願いします。
MTのバージョンは3.33-jaが既に入手できなかったため、3.33で確認をしましたが、同一の設定をしても現象が発生しませんでした。
で、ここからはできればのお願いなのですが、プラグインにデバッグコードを仕込んでもらい、以下のことを確認していただきたいと考えています。
1. デバッグコードの仕込み
プラグイン内のファイル「ArchivePage.pl」の関数「ap_build_file」にて以下のコードを記述してください。
行数は51行目、関数で引数を受け取ったあとぐらいにお願いします。
open(DEBUG_IN, ">> /tmp/dump.log");
print DEBUG_IN "==========\n";
for my $dk (keys %args) {
print DEBUG_IN $dk . " => " . $args{$dk} . "\n";
}
close(DEBUG_IN);
なお、ファイル「/tmp/dump.log」はLinux上の/tmpディレクトリ以下に出力されるようにしていますが、環境がWindowsだとパスが異なるかと思いますので、CGIを実行するユーザが出力できる場所を指定してください。
2. ファイルの削除
この関数は再構築対象となるファイルが更新されているとファイル生成が実行されます。そのため、エントリ等更新がないとファイル生成関数は呼び出されません。
そのため、一度対象となるエントリファイル(ken様の場合はカテゴリファイル)を削除してください。
なお、削除する前にはバックアップ等をとっておいてください。
3. 再構築の実行とファイルチェック
再構築をしますと、1.で指定したファイルに引数の情報が出力されます。以下のような感じになるかと思います。
FileInfo =>
Entry => MT::Entry=HASH(0xa711e38)
Template => MT::Template=HASH(0xa98fa9c)
BuildResult => SCALAR(0xa7228cc)
Context => MT::Template::Context=HASH(0xa6fc820)
RawContent => SCALAR(0xa7228cc)
TemplateMap => MT::TemplateMap=HASH(0xa6fc940)
ArchiveType => Individual
PeriodStart =>
File => /xxx/post_9.html
Content => SCALAR(0xa722a4c)
Category =>
Blog => MT::Blog=HASH(0xa73ee94)
もしこの内容が出力されていないようでしたらプラグイン側ではなくMT側からの問題になりますため、当方では調査が困難な状況になります。
また、以下のURLにてMT-3.33のアーカイブがダウンロードできます。当方はこれにて確認しておりまして、こちらでは問題なく動きましたので、もし時間や手間がかからないようでしたらこちらのバージョンでも試してみてください。
http://www.movabletype.org/opensource/downloads/archives/3.x/MT-3.33.zip
先ほどのデバッグコードについてですが、以下のURLでデバッグコードを記述したプラグインを置きました。
http://www.boundless-ocean.ne.jp/2007/02/mt-archive-page-debug.zip
こちらをダウンロードして利用してみてください。
また、コメントにも書きましたようにデバッグの出力ファイルのパスは環境にあわせて修正してください。