メインページ(いわゆるインデックス)に、任意の1ヶ月分のエントリーを表示させる

い合わせが出てるので答えてみる事にしました。
最初に回答したものでは「最新のひと月分」と「現在(任意)のひと月分」という相違があったのでやり直し。

イベントカレンダーのようなページを作成しており、
メインページのエントリー部に、現在月のエントリーを1ヶ月分昇順で表示したいと思っています。
※来月分のエントリーも投稿済みです

それではちょっとやってみましょう。

先ずはどんな仕様

PHPを前提として、出来るだけ簡素になるようにまとめてみました。
HTMLでの場合も後述します。基本的にはPHPの場合と同じです。


MTタグだけで実現しようとするのはちょこっと難しいかもです。
なぜならば、MTCalendar タグを用いて任意の月分のエントリーを取り出す事は出来ても、ソート出来ないからです。また、 month="this" のアトリビュートはインデックスで用いる事が出来ません。
そして、既に投稿したエントリーが存在する場合、それらが「最新のひと月分」となってしまうからです。


この点は、ひょっとしたら「既に投稿済み」分を下書きとして保存しておく事で回避する事が出来るかもしれません。が、とりあえずそれはテストしません。気になる場合はやってみる方向でよろしくです_(..)_

ひと月分のテンプレート

テンプレート→アーカイブ(タブ)→テンプレート新規作成 と進み、以下みたいなのを作ります。

エントリーに対してアトリビュートを用いる事で、並び方や投稿者別やカテゴリー指定などの条件を付ける事が出来ます。なので、表示させる部分の内容や形式はこのテンプレート内で調整する事になります。

出力させる

テンプレート として作成したので、上記を出力させなくてはなりません。「ひと月分」なので、アーカイブの種類を月別に関連付けさせましょう。
設定→公開(タブ)→アーカイブ・マッピング→マッピング新規作成

  • アーカイブの種類・・・月別
  • テンプレート・・・さっき作成したテンプレート
  • 出力フォーマット・・・%y%m.php

アーカイブURL直下にファイルが作成されるのは、判り易くするためです。好みに改変しましょう。また、アーカイブURLを設定してない場合はサイト直下にファイルが出来るので注意です。

インデックス で表示させる

PHP化を施してる場合は簡単です。あとは上記のファイルを readfile や include 等で読み込ませるだけ。

上記は例として、アーカイブ直下に生成される2007年4月のエントリー一覧を読み込ませて表示させる例。月部分の数字を変更すれば任意の月になりますね。


で、この日付部分に関しては Date format を用いる事で変える事が出来そうですがあえてやってません。そっちの方がメンドイです。なので、インデックスに表示させるなら直書きした方が良いですほんとに。


それか、「作成したテンプレート」内では恐らく month="this" のアトリビュートも使えますので、それを利用するならば、別に月別なファイルをそれぞれ利用しなくてもひとつのファイルで「今月の一覧」を作成する事が可能でしょう。
そうなると、月が変わっても上記のPHPコードを改変する必要なし、となります。ただ、「月別として生成されるはずのファイルがひとつしか生成されない指定」を行う事でMTがどんな動きになるのかは判りませんけど。

HTML の場合

マジックワードを使って、HTMLファイルをPHPファイルと勘違いさせて使用させるようにしてみてはどうでしょうか?
以下を htaccess ファイルに記述すれば、HTMLファイル内でもPHPコードが使えるようになります。

それか、SSIを用いて読み込ませる。


「ファイルを読み込ませる」には好きな方法を使えば良いです。

あとがき

「アーカイブ・マッピング」を利用するのでちょっと判り辛いかもしれません。
私は テンプレート と マッピング を理解するまでにすっごい時間掛かりました。代りに、これを自在に扱えるようになれば幅は広がります。
面白いし。


ただ、今回のこの方法はスマートではない・・・出来ればMTタグだけで実現させたいとか利用したい・・・って事もあるかと思いますので、意見や判る方がいらしたら教えて下さい。よろしくです_(..)_

2007/05/20 23:35:09 追記:
PHP化を前提として進めたエントリーでしたが、考え直してみると「PHPを利用しているのはファイル読込のためだけ」です。 そして、MTには「ファイル読込のためのMTタグ」が存在します。 ということは、PHP化せずともHTMLの状態でこのカスタマイズは十分行う事が出来ますね。


異なるところは、「インデックスで表示させる」のとこで書いてる読込例の部分だけです。
一応述べておくと「出力させる」のとこで書いてる「出力フォーマット」の拡張子はhtmlになります。
そして以下が読み込み例。

「archives」や「200704(年月)」についての説明は重複するので省きます。


MTIncludeはテンプレートとして作成出来る「モジュール」を読み込むのと、パーツ化したテンプレートやファイルを読み込むのと、双方の場合で利用出来るMTタグです。


●「モジュール」を読み込ませる時(モジュールを「hogehoge」という名前で作った場合)


●「ファイル」を読み込ませる時(ファイルを「hogehoge.html」という名前で作った場合)


というわけで、PHP化を施さなくても上記のMTIncludeを利用すれば良い、となります。
ファイルを読み込ませる、という事を前提にしてますので、MTInclude fileを使う事になるわけですが、この時記述するファイルまでのパスは、サイト(ブログ)のトップディレクトリからの相対パス指定になります。
そして、MTIncludeの場合はPHPやSSIの場合と異なり、ファイルへのリクエストがあってから読み込むものではなく、リビルドされているのが前提となります。
つまり、MTIncludeを用いた記述をインデックス・テンプレートに行っており、月別アーカイブだけを再構築したからといって、その変化はインデックス・テンプレートには伝わりません。
月別アーカイブをリビルドしたあと、インデックス・テンプレートの再構築も行って初めて反映されます。
MTIncludeを用いる場合は、その記述を行っているページが再構築される時に読み込まれる、という動きになりますのでそこに注意して下さい。


ついでなので少しだけ紹介しておくと、このMTIncludeを拡張してくれるプラグインも在ります。
MT Extensions: MTIncludePlus 1.1
これを用いた場合の表記例はこんな具合になります。

ちょっと長くなってしまいましたが、以上です_(..)_

▲ to Top

トラックバック(0)

▲ to Top