最新のコメント・TBの表示を各アーカイブで固定する方法
MTのテンプレートは、デフォルトでは、カテゴリーアーカイブ・エントリーアーカイブといった各アーカイブには、サイドバーが表示されないようになっている。
これを表示させるには、indexテンプレートにあるサイドバー部分のソースをそのまま各アーカイブテンプレートに貼り付けてやればいいのだが、それをそのままやってしまうと(もしくはモジュールを新規作成してMTInclude moduleでインクルードすると)、「最新のコメント」「最新のトラックバック」などは、各アーカイブごとに値が変わってしまう。たとえば、カテゴリーアーカイブの時は、そのカテゴリーの中の最新のコメントが。エントリーアーカイブの時は、そのエントリーの中の最新のコメントが表示される、といった具合。
どうもこれは、MTEntriesタグやMTCommentsタグが、各アーカイブによって値を変える、MTの仕様のようで。
しかしこのままの状態では、「最新の」とうたっていることと反するので、それを回避する方法を探してみた。
小粋空間:アーカイブページに「最近のコメント」「最近のトラックバック」を表示する
いくつか候補があるうち、やり慣れているモジュール化に挑戦してみた。
サイドバーのソース部分を新規テンプレートに移し、ファイル名を付けて出力。
phpインクルード文を、サイドバーを表示させたい各テンプレートに付けてみる。
すると、カテゴリーアーカイブにエラーが出る。
どうやら、新着記事があったカテゴリーに自動的に「NEW!」を付けるために入れているphpスクリプトがいかんようだ。
phpインクルードの他の候補であるMTIncludeタグは、リビルド時でないと更新が反映されないし、javascriptはちょっと気分的に使う気しないし、phpでどうにかならんもんかーー、と思っていたところ。
こんな記事を見つけた。
小粋空間:Movable Type の PHP モジュール化の仕組みについて(その3:変更方法)
readfileはファイルを読み込むだけの関数ですが、include はファイルを読み込み、さらにそれをプログラムとして評価するための関数です。(中略)インクルードが何段にもなる場合は、インクルード元に近い方から include 関数を用いて、一番末端だけ readfile 関数または include 関数を使用、という構造になります。
…そんなことだろうと思った〜〜〜。
中ですでにphpスクリプトを使っている場合は、readfileでなくinclude関数を使わなければならなかった、ということだ。(ていうか逆に、phpスクリプトを使ってない時は、include関数使うモンじゃないよ、ということらしい)
というわけで、500エラーも出ずに、phpエラーも出ずに、やっとこ再構築が無事できるようになったのだった…。
参照先に感謝。
※注:アーカイブページがインクルードするファイルと違うディレクトリにある場合は、phpインクルード文のファイル名の部分は、絶対パスで入れること。(相対でもいいけど絶対の方が、共通で使えるからという理由)
グッジョブだったらポチッと→