« その時間、わたくしは | メイン | 明日アップする分 »

最新のコメント・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インクルード文のファイル名の部分は、絶対パスで入れること。(相対でもいいけど絶対の方が、共通で使えるからという理由)

グッジョブだったらポチッと→

コメントを投稿

月別アーカイブ

2017年
2016年
2013年
2012年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
           

Blogのフィードを取得

Powered by
Movable Type 6.3.3