ダイナミック・パブリッシング対応 ArchiveDateFooter プラグイン
Category : MTplugin
「MTプラグイン PHPizeプロジェクト」第5弾!
今回は、ArchiveDateFooterプラグイン。
先日紹介したArchiveDateHeaderプラグインの対となるモノとして、小粋空間さんが独自に公開したモノです。
【※2007/05/29 一部追記・修正】
ダウンロード
(どちらかを選択してください。内容は同じです。)
- ArchiveDateFooter_php.zip[896 Bytes]
- ArchiveDateFooter_php.tar.gz[705 Bytes]
セット・アーカイブ
ArchiveDateHeader と ArchiveDateFooter のPHP版を一つにしたお得なセットをご用意いたしました。
ArchiveDateHeader(PHP版)をまだダウンロードしていない方は、こちらをダウンロードしてください。
- ArchiveDate_H_F_php.zip[1,655 Bytes]
- ArchiveDate_H_F_php.tar.gz[828 Bytes]
インストール
- ダウンロードしたファイルを解凍してください。
ただ一つのPHPファイル block.MTArchiveDateFooter.php が生成されます。
※セット・アーカイブの方をダウンロードされた場合は、もう一つのファイル block.MTArchiveDateHeader.php も生成されます。 - 解凍して得られた(すべての)ファイルを、[MT]/php/plugins/ フォルダ内にコピー(アップロード)してください。
使い方
このプラグインは、<MTArchiveDateFooter>というテンプレートタグを提供します。
このタグは、<MTArchiveList>の中で使用し、その archive_type 属性値が "Monthly" の場合は アーカイブ日付の年が新しくなる直前、"Weekly" の場合は 月が新しくなる直前にだけ、その内容が表示されるものです。
このテンプレートタグは、しばしば<MTArchiveDateHeader>とともに使用します。
例えば、以下のようなテンプレートソースを考えます。
<MTArchiveList archive_type="Monthly">
<MTArchiveDateHeader>
<h5><MTArchiveDate format="%Y"></h5>
<ul>
</MTArchiveDateHeader>
<li><a href="<$MTArchiveLink$>"><MTArchiveDate format="%B"></a></li>
<MTArchiveDateFooter>
</ul>
</MTArchiveDateFooter>
</MTArchiveList>
これは、例えば↓このように表示されます。
2007
2006
注意点
【※以下の内容は、Perl版ArchiveDateFooterプラグイン v1.01以下に基くものです。2007/03/19 に公開された v1.02 では下記の問題は修正されています。】
……と、archive_type="Monthly"の場合は期待通りに動作します。
が、実はarchive_type="Weekly"の場合は、MTArchiveDateHeader と同様の問題が発生します。
<MTArchiveList archive_type="Weekly">
<MTArchiveDateHeader>
<h5><MTArchiveDate format="%B %Y"></h5>
<ul>
</MTArchiveDateHeader>
<li><MTArchiveTitle></li>
<MTArchiveDateFooter>
</ul>
</MTArchiveDateFooter>
</MTArchiveList>
例えば↑これをスタティックなテンプレートで構築すると、現状では↓こうなってしまいます。
2007/03
- 2007/03/11 - 2007/03/17
2007/03
- 2007/03/04 - 2007/03/10
2007/02
- 2007/02/25 - 2007/03/03
2007/02
- 2007/02/11 - 2007/02/17
2007/02
- 2007/02/04 - 2007/02/10
2007/01
:
- 2007/01/28 - 2007/02/03
つまり、「月が新しくなるごとに」と説明に書いてあるのに、毎週ヘッダーが出力されてしまうのです。
(ver.1.01 で確認)
今回作成したPHP版では、この問題に対処しています。
つまり、ダイナミック・パブリッシングだと以下のように出力されます。
2007/03
- 2007/03/11 - 2007/03/17
- 2007/03/04 - 2007/03/10
2007/02
- 2007/02/25 - 2007/03/03
- 2007/02/11 - 2007/02/17
- 2007/02/04 - 2007/02/10
2007/01
:
- 2007/01/28 - 2007/02/03
スタティックページでも、本来の仕様通り月ごとにヘッダーが出力されるようにするには、以下の要領でソースを修正してください。
(※v1.02 以降をご使用の方は、以下の修正は不要です。)
ArchiveDateFooter.pl の58・59行目を以下のように修正:
54: if ($at eq "Monthly") {
55: $current_date = substr $ts, 0, 4;
56: $start = substr $start, 0, 4;
57: } elsif ($at eq "Weekly"){
58: $current_date = substr $ts, 5, 6;
59: $start = substr $start, 5, 6;
60: } else {
61: return '';
62: }
↓
54: if ($at eq "Monthly") {
55: $current_date = substr $ts, 0, 4;
56: $start = substr $start, 0, 4;
57: } elsif ($at eq "Weekly"){
58: $current_date = substr $ts, 4, 2;
59: $start = substr $start, 4, 2;
60: } else {
61: return '';
62: }
Weeklyで一覧を表示したい方は、ご注意ください。
※この変更は、整合性を保つため、ArchiveDateHeader プラグインの修正と同時に行ってください。
→ [ArchiveDateHeader プラグインの修正について]
(※Perl版ArchiveDateFooter v1.02 以降をご使用の方でも、ArchiveDateHeader の修正は必要です。)
互換性について
通常使用する分には、現在公開されているArchiveDateFooterプラグイン(v1.02以降)と互換性があります。
ただし、以下の点に注意してください。
- <MTArchiveList> に sort_order="ascend" を指定した場合の動作が異なります。
- エラーが発生したときの挙動がPerl版と異なります。
archive_type="Weekly" を指定した <MTArchiveList>~</MTArchiveList> 内での挙動がPerl版と異なります。
前者は、オリジナルの(Perl版)ArchiveDateFooterプラグインでは、<MTArchiveList> に sort_order="ascend" を指定した場合には<ArchiveDateFooter>にも同じ属性を指定しないと期待通りの動作をしませんが、PHP版ではこの属性の指定は不要です。(指定しても無視されます。)逆にこの属性を指定したコトによる動作を利用したテンプレートは、期待した動作をしない可能性があるので、ご注意ください。
後者については、上記注意点を参照してください。
(エラー発生時の挙動について詳細は省略いたします。)
著作権・ライセンスについて
※ただいま調査中です。
ソースそのものは、オリジナルの動作を完全にシミュレートする形で一から書き起こしていますので、著作権の侵害には当たらないと思われますが、ライセンスに関しては詳細が判明次第、ここに追記いたします。
【※追記:2007/05/29】
PHP版ArchiveDateFooterプラグインの著作権は、原作者であるYujiro Araki氏、およびPHP版制作者である あんちもん2 が主張させていただきます。
(block.MTArchiveDateFooter.php: Copyright (c) 2006-2007 Yujiro Araki, Antimon2)
なお、オリジナルのPerl版indexcontextプラグインについては、原作者のYujiro Araki氏に著作権があります。
またこのプラグインは、元の著作物を公開している小粋空間に則り、「クリエイティブ・コモンズ・ライセンス 表示 - 非営利 - 継承 2.1 日本」に順ずるものとします。
なお、こちらで公開しているPHPソースおよびそれを使用したことによる問題点や気づいた点に関して、原作者に直接問い合わせをしないでください。
この記事へのコメント、もしくはトラックバック等でお願いいたします。





コメントする