MTIfタグにtagモディファイアを利用する場合の注意事項

MTIfタグにtagモディファイアを利用する場合の注意事項

Posted at November 4,2010 12:03 AM
Tag:[MovableType, MTComentURL, MTIf, TroubleShooting]

Movable TypeのMTIfタグにtagモディファイアを使ったとき、つまづいたケースがあったので、本エントリーで情報展開します。

基礎知識ですが、MTIfタグにtagモディファイアを利用すれば、テンプレートタグの値を判定条件に利用することができます。次の例は、記事タイトルが「test」であることを判定するものです。

<mt:Entries>
  <mt:if tag="EntryTitle" eq="test">
    [記事タイトルが「test」であればこの部分を実行]
  </mt:if>
</mt:Entries>

1.問題点

問題となるサンプルは、次のコメント一覧を表示するものです。

<mt:Comments>
<mt:CommentBody>
Posted by 
<mt:if tag="CommentURL">
  <a href="<mt:CommentURL />" title="<mt:CommentID>"><mt:CommentAuthor default="Anonymous" escape="html" /></a>
<mt:else>
  <mt:CommentAuthor default="Anonymous" escape="html" />
</mt:if>
</mt:Comments>

MTIfタグを使って、コメント投稿者のURLがある場合は、そのURLをコメント投稿者のリンクとして利用します。コメント投稿者のURLの有無は、MTCommentURLタグをtagモディファイアで判定します(青色部分)。

ここまでは問題なく動作するのですが、再構築を実施すると、赤色で示した

title="<mt:CommentID>"

の部分が出力ページに存在せず、title属性だけ削除された形で出力されてしまいます。

2.原因

原因は、MTIfタグでMTCommentURLを判定していることで、MTCommentURLの処理がMTIfタグブロック内のコンテンツにまで適用されてしまっているようです。

MTCommentURLタグには、コメント投稿者のURLを出力する以外に、URLを管理画面の「設定」→「コミュニケーション」に設定した(X)HTML要素や属性以外のものを削除する処理が含まれています。

つまり、出力結果からtitle属性が削除されたのは、この処理が行われたものと推測します。

3.対処

このケースでは、管理画面の「設定」→「コミュニケーション」→「HTMLタグを制限」にtitle属性を追加することでこの問題は解消します。

HTMLタグを制限

ただし、追加することで、コメント投稿でもtitle属性の入力が許容されるため、本質的な解決ではないかもしれません。

4.まとめ

今回のケースはMTCommentURLタグに特化した問題でしたが、他のテンプレートタグをMTIfタグのtagモディファイアに利用すると、また新たな問題が発生する可能があります。

MTIfタグで括った部分の出力結果が期待通りにならない場合、この辺りを疑ってみるとよいかもしれません。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


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

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

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

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