Movable Typeのコメント一覧からウェブページのコメントを除外して表示する

Movable Typeのコメント一覧からウェブページのコメントを除外して表示する

Posted at August 18,2010 1:33 AM
Tag:[Comment, MovableType]

Movable Type 4、Movable Type 5で、コメント一覧からウェブページのコメントを除外して表示するカスタマイズを紹介します。

変更前
コメント一覧

変更後
コメント一覧(ブログ記事のみ)

1.基本

MTCommentsタグは、MTEntriesタグ内部で使った場合はブログ記事へのコメント、MTPagesタグ内部で使った場合はウェブページのコメントを出力しますが、単独(=MTEntriesタグやMTPagesタグで括らない)で利用した場合は、ブログ記事/ウェブページの両方のコメントを出力する仕様になっています。

MTCommentsタグには、ブログ記事/ウェブページのどちらへのコメントかを判定するモディファイアは用意されていません。

投稿コメントが、ブログ記事/ウェブページのどちらへのコメントかを判定するには、次のようにMTCommentsタグ、MTCommentEntryタグ、MTIfタグを組み合わせます。

<mt:Comments>
  <mt:CommentEntry>
    <mt:if tag="EntryClass" eq="entry">
      [ここに出力内容を記述]
    </mt:if>
  </mt:CommentEntry>
</mt:Comments>

MTIfタグにはtagモディファイアを与え、MTEntryClassタグを判定します。MTEntryClassタグの内容が「entry」であればブログ記事への投稿、「page」であればウェブページへの投稿を示します。

2.ブログ記事のコメントのみを出力する

MTCommentsタグを単独で利用して、ブログ記事のコメントのみを出力するサブテンプレートを紹介します。

冒頭の画像のように、デフォルトの「最近のコメント」ウィジェットでブログ記事のコメントのみを出力するには、次のように変更します。青色が追加部分、赤色が変更部分です。

<mt:If tag="BlogCommentCount">
  <mt:SetVar name="comment_counter" value="0" />
  <mt:Comments lastn="0" sort_order="descend">
    <mt:CommentsHeader>
<div class="widget-recent-comments widget">
  <h3 class="widget-header">最近のコメント</h3>
  <div class="widget-content">
    <ul>
    </mt:CommentsHeader>
    <mt:CommentEntry>
      <mt:if tag="EntryClass" eq="entry">
        <mt:if name="comment_counter" lt="10">
      <li><strong><$mt:CommentAuthor$>:</strong> <$mt:CommentBody remove_html="1" words="10"$> <a href="<$mt:CommentLink$>" title="<mt:CommentEntry><$mt:EntryTitle$></mt:CommentEntry>へのコメント">続きを読む</a></li>
        <mt:SetVar name="comment_counter" op="++" />
        </mt:if>
      </mt:if>
    </mt:CommentEntry>
    <mt:CommentsFooter>
    </ul>
  </div>
</div>
    </mt:CommentsFooter>
  </mt:Comments>
</mt:If>

MTIfタグのeqモディファイアの値「entry」を「page」に変更すれば、ウェブページへのコメント一覧を表示できます。

コメント一覧(ウェブページのみ)

「最近のコメント」をネイティブタグのみで適正に表示する」で紹介しているサブテンプレートでブログ記事のみを出力する場合、次のように変更します。青色が追加部分、赤色が変更部分です。

MTCommentEntryの終了タグは位置を変更しています。これは、ウェブページの処理を行った場合に不要な処理が実行されないようにするための対処です。

<mt:SetVar name="comment_counter" value="0" />
<mt:Comments lastn="0" sort_order="descend">
  <mt:CommentEntry>
    <mt:if tag="EntryClass" eq="entry">
      <mt:if name="comment_counter" lt="10">
        <mt:SetVarBlock name="entry_title"><a href="<mt:EntryPermalink />"><mt:EntryTitle /></a></mt:SetVarBlock>
        <mt:SetVarBlock name="entry_comment">
    <li><a href="<mt:EntryPermalink />#c<mt:CommentID />"><mt:CommentAuthor default="Anonymous"></a> <mt:CommentDate format="%m/%d"></li>
        </mt:SetVarBlock>
        <mt:SetVar name="comment_list{$entry_title}" value="$entry_comment" prepend="1" />
        <mt:SetVar name="comment_counter" op="++" />
      </mt:if>
      <mt:SetVar name="flag" value="0" />
      <mt:loop name="title_list">
        <mt:if name="__value__" eq="$entry_title">
          <mt:SetVar name="flag" value="1" />
        </mt:if>
      </mt:loop>
      <mt:unless name="flag">
        <mt:SetVar name="push(title_list)" value="$entry_title" />
      </mt:unless>
    </mt:if>
  </mt:CommentEntry>
</mt:Comments>
 
<dt class="sidetitle">
Recent Comments
</dt>
<dd class="side">
  <ul>
<mt:loop name="title_list">
    <li>
    <mt:getVar name="__value__" />
      <ul>
    <mt:getVar name="comment_list{$__value__}" />
      </ul>
    </li>
</mt:loop>
  </ul>
</dd>
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


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

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

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

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