TopMovable Typeトラブルシューティング > Movable Type 4 の再構築で「Can't call method "id" on unblessed reference」が発生する問題について
News
各種ブログテンプレート
2009年1月13日

エントリー本文

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

Posted at January 13,2009 1:01 AM
Category:[トラブルシューティング]
Tag:[, , , ]

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 モディファイアで指定したカテゴリー配下のサブカテゴリーも処理対象にします。

Posted by yujiro ReTweet This!
関連記事
この記事を読んだ人はこんな記事も読んでいます
人気エントリー
Hatena Hot Entries
Hatena Entries
トラックバックURL


コメントする
greeting

*必須



ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Introduction
Entries of this Category
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

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

loading ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.261