Page Top

複数ブログをまとめてくれるMTMultiBlog:モジュールが入れ子状態になると起こる不具合

October 5, 2007

前回の”複数ブログをまとめてくれるMTMultiBlog:MT3とMT4における書き方の違い”に引き続き、MT4でMultiBlogを使った場合に発生する、別の事象を紹介できたらと思います。

前回の分は、MTMultiBlogタグの私の書き方が悪かっただけで、別にバグでも何でもなかったのですが、今回の分は今のMTのバージョンMT4.01ではバグのようです。Six ApartさんのMTフィードバックでいただいたご連絡でわかりました。でも、開発コード上では既にバグfixされているそうなので、次バージョンでは大丈夫のようです。では、どんな場合にMTMultiBlogを使ったブログで、モジュールに問題が生じるかと言うと、以下のようになります。

<ブログA (ブログID=1とします。)>
・モジュール名:ヘッダー
    この「ヘッダー」というモジュールの中には、
    <meta name="keywords" content="<$MTInclude module="キーワード"$>" />
    というメタ情報が入力されている。
・モジュール名:キーワード
    「キーワード」というモジュールの中には、
    ブログのキーワードとなる単語が含まれている。

<ブログB (ブログID=2とします。)>
・メインページ(index.html)
    メインページには、ブログAのモジュール「ヘッダー」が
    以下のMTMultiBlogタグにて呼び出されている。
    <MTMultiBlog include_blogs="1">
        <MTInclude blog_id="1" module="ヘッダー">
    </MTMultiBlog>

この状況下でブログBのメインページ(index.html)を再構築すると、
  ”テンプレート「メインページ」の再構築中にエラーが発生しました:
  テンプレートタグMTMultiBlogでエラーが発生しました:
  テンプレートタグMTIncludeでエラーが発生しました:
  error in module ヘッダー: テンプレートタグ
  MTIncludeでエラーが発生しました:
  モジュールというテンプレートが見つかりませんでした: キーワード”
というエラーが発生します。(MT3だとこのエラーは発生しません。)

なので、このエラーを回避するため、ブログAの方のモジュール「ヘッダー」に記述している、
<meta name="keywords" content="<$MTInclude module="キーワード"$>" />
のモジュールである「キーワード」がどこのブログから取得されて来るべきなのかをより明確にするため、
<meta name="keywords" content="<$MTInclude blog_id="1" module="キーワード"$>" />
というようにして、blog_id="1"を加えて明示してあげると、同じブログA上にあるモジュール「キーワード」を理解するようで、ブログBのメインページの再構築ができるようになります。
MT3の時は、「blog_id="1"」を明記しなくても、同じブログAのモジュールの中に「キーワード」というモジュールがあるので、それを勝手に読み込んでくれていました。

というわけで、MT4でだと、同じブログ上に(この場合はブログA上に)読み込めるはずのモジュールがあるにも関らず、MultiBlogが別ブログで使われ、ブログA上のモジュールがブログBで読み込まれると、ブログAで入れ子状態になったモジュールの内側のモジュール(この場合”キーワード”)が、ブログA上から探されるのではなく、なぜかブログB上で探されてしまい、該当モジュールがないので、エラー、という状況になっていたようです。

これはバグだそうなので、私もようやくバグレポートに1つ貢献できた(・・?)かもしれません。

最新記事