JavaScript、Ajax、HTML5(API)、Ruby…Web及び関連技術の実験&情報公開&制作物紹介。

ダイナミック・パブリッシング対応 ArchiveDateFooter プラグイン

「MTプラグイン PHPizeプロジェクト」第5弾!

今回は、ArchiveDateFooterプラグイン
先日紹介したArchiveDateHeaderプラグインの対となるモノとして、小粋空間さんが独自に公開したモノです。

2007/05/29 一部追記・修正】

ダウンロード

(どちらかを選択してください。内容は同じです。)

セット・アーカイブ

ArchiveDateHeader と ArchiveDateFooter のPHP版を一つにしたお得なセットをご用意いたしました。
ArchiveDateHeader(PHP版)をまだダウンロードしていない方は、こちらをダウンロードしてください。

インストール

  1. ダウンロードしたファイルを解凍してください。
    ただ一つのPHPファイル block.MTArchiveDateFooter.php が生成されます。
    ※セット・アーカイブの方をダウンロードされた場合は、もう一つのファイル block.MTArchiveDateHeader.php も生成されます。
  2. 解凍して得られた(すべての)ファイルを、[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ソースおよびそれを使用したことによる問題点や気づいた点に関して、原作者に直接問い合わせをしないでください。
この記事へのコメント、もしくはトラックバック等でお願いいたします。

カテゴリ

月別 アーカイブ

OpenID対応しています OpenIDについて

このブログ記事について

このページは、あんちもん2が2007年3月18日 13:14に書いたブログ記事です。

ひとつ前のブログ記事は「ダイナミック・パブリッシング対応 ArchiveDateHeader プラグイン」です。

次のブログ記事は「ダイナミック・パブリッシング対応 indexcontext プラグイン」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。