2009年1月13日

Movable Type 4 の再構築で「Can't call method "id" on unblessed reference」が発生する問題について

Movable Type 4 の月別カテゴリーアーカイブの再構築時に、次のようなエラーが発生する場合があります。

これは、「『新着エントリーの New マークを親カテゴリーに表示する』で再構築エラーになります」というご質問を頂いたのが発端です。

以下、本エントリーにて解消方法を展開します。なおこの問題は、バージョン 4.23 で確認しています。

1.問題

切り分けを行なったところ、月別カテゴリーアーカイブが再構築エラーになるのは、MTTopLevelCategories タグと MTEntriesWithSubCategories タグを次のように組み合わせた場合のようです。

<MTTopLevelCategories>
  <MTEntriesWithSubCategories>
  </MTEntriesWithSubCategories>
</MTTopLevelCategories>

MTSubCatsRecurse タグの有無は関係ありません。

2.解決策

とりあえず、MTEntriesWithSubCategories タグの振る舞いに問題がありそうなので、MTEntriesWithSubCategories タグの代わりに、MTEntries タグを使い、さらに category モディファイアとinclude_subcategories モディファイアを組み合わせます。

新着エントリーの New マークを親カテゴリーに表示する」のサブテンプレートを例に、修正内容を示します。

変更前

<div class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><MTHasParentCategory><div id="subcategories<MTParentCategory><$MTCategoryID$></MTParentCategory>list"></MTHasParentCategory><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>] <span class="new"><MTEntriesWithSubCategories lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntriesWithSubCategories></span><MTHasSubCategories></div></MTHasSubCategories>
<MTElse>
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><MTCategoryLabel> <span class="new"><MTEntriesWithSubCategories lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntriesWithSubCategories></span>
<MTHasSubCategories></div></MTHasSubCategories>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul><MTHasParentCategory></div></MTHasParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>

変更後

<div class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><MTHasParentCategory><div id="subcategories<MTParentCategory><$MTCategoryID$></MTParentCategory>list"></MTHasParentCategory><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>] <span class="new"><MTCategoryLabel setvar="cat"><MTEntries category="$cat" include_subcategories="1" lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntries></span><MTHasSubCategories></div></MTHasSubCategories>
<MTElse>
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><MTCategoryLabel> <span class="new"><MTCategoryLabel setvar="cat"><MTEntries category="$cat" include_subcategories="1" lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntries></span>
<MTHasSubCategories></div></MTHasSubCategories>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul><MTHasParentCategory></div></MTHasParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>

ピンポイントで抜き出すと以下のようになります。

変更前

<MTEntriesWithSubCategories lastn="1">
  <$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$>
</MTEntriesWithSubCategories>

変更後

<MTCategoryLabel setvar="cat">
<MTEntries category="$cat" include_subcategories="1" lastn="1">
  <$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$>
</MTEntries>

変更後のサブテンプレートですが、まず、MTCategoryLabel タグに setvar モディファイアを与えて、変数 cat に処理中のカテゴリー名を設定します。

その後、MTEntries タグの category モディファイアに変数 cat を与えることで、処理中のカテゴリだけを対象にします。

さらに include_subcategories モディファイアに 1 を与えることで、category モディファイアで指定したカテゴリー配下のサブカテゴリーも処理対象にします。

Comments [0] | Trackbacks [0]
2009年1月 4日

MTMultiBlog タグブロック内での MTInclude タグの入れ子について

January 4,2009 12:33 AM
Tag:[, ]
Permalink

現在、Movable Type の MultiBlog プラグインでポータルブログの実験中ですが、MTInclude タグの入れ子があると再構築でエラーになるようです。
確認したのは 4.23 + Windows ローカル環境のみで、他の環境は確認できていません。

まず、ポータルブログにするブログのメインページに次のようなサブテンプレートがあります。

<mt:Entries>
    <$mt:Include module="ブログ記事の概要"$>
</mt:Entries>

サブテンプレートからインクルードしている「ブログ記事の概要」テンプレートモジュールでは、さらに MTInclude タグを使って「ブログ記事のメタデータ」テンプレートモジュールをインクルードしています。メタデータには投稿日時や投稿者、コメント件数やトラックバック件数など、ブログ記事の投稿情報が含まれます。

次に、ポータルブログの収集対象となるブログの作成と、各ブログの MultiBlog プラグインの設定を行ったあと、上記のサブテンプレートを MTMultiBlog タグで括り、

<mt:multiBlog mode="loop">
<mt:Entries>
    <$mt:Include module="ブログ記事の概要"$>
</mt:Entries>
</mt:multiBlog>

とすると、メインページの再構築時に次のエラーが発生します。

再構築時のエラー

MTInclude でインクルードしている内容を元テンプレートに貼り付けると、再構築エラーは解消します。
「ブログ記事の概要」テンプレートモジュールでは「カテゴリ」テンプレートモジュール、「タグ」テンプレートモジュールをインクルードしていますが、それらについても同様です。

要約すると、MTMultiBlog タグから1回のインクルードは大丈夫ですが、入れ子のインクルードがあると再構築エラーになるようです。大雑把な説明ですいませんが、当方の設定ミス等がありましたらご指摘ください。

Comments [3] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3