Movable Typeのカスタムフィールドに入力した複数のブログ記事IDからブログ記事リストを出力する

Movable Typeのカスタムフィールドに入力した複数のブログ記事IDからブログ記事リストを出力する

Posted at September 28,2011 1:55 AM
Tag:[CustomField, MovableType, Split]

Movable Typeのカスタムフィールドに入力した複数のブログ記事IDからブログ記事リストを出力するカスタマイズを紹介します。

MTQで質問がありましたので、本エントリーで情報展開します。

1.カスタマイズイメージ

カスタムフィールド「ブログ記事ID」を作成します。種類は「テキスト」、テンプレートタグは「MTEntryIDs」とします。

カスタムフィールド作成画面

ブログ記事編集画面に表示されたカスタムフィールド「ブログ記事ID」に、ブログ記事ページに表示したいブログ記事のIDをカンマ区切りで設定します。

ブログ記事編集画面

ブログ記事を保存すれば、該当のブログ記事ページに、カスタムフィールドに入力したブログ記事IDに対応するブログ記事のリストを出力します(赤枠部分)。

ブログ記事ページ

以下、カスタマイズ方法を順を追って解説します。

2.Splitプラグインのインストール

以下のリンクよりSplitプラグインをダウンロード・インストールします。

Split プラグイン

Splitプラグインは、Perlのsplit機能をグローバルモディファイアとして提供します。

次のサブテンプレートは、変数fooに設定した「a,b,c」という値をカンマで区切り、「a」「b」「c」を配列変数barに設定するサンプルです。

<mt:setvar name="foo" value="a,b,c" />
<mt:getVar name="foo" split="," setvar="bar">
<mt:loop name="bar"> 
  <mt:getVar name="__value__" /><br />
</mt:loop>

このサブテンプレートの出力結果は、

a
b
c

となります。

3.テンプレートの修正

次のようなサブテンプレートをブログ記事アーカイブに追加します。

<mt:if tag="EntryIDs">
<h2>関連ブログ記事</h2>
  <$mt:EntryIDs split="," setvar="entry_ids"$>
  <mt:loop name="entry_ids">
    <mt:if name="__first__">
<ul>
    </mt:if>
    <mt:Entries id="$__value__"> 
  <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
    </mt:Entries>
    <mt:if name="__last__">
</ul>
    </mt:if>
  </mt:loop>
</mt:if>

サブテンプレートの仕組みは次の通りです。

まずMTIfタグでMTEntryIDsタグの値の入力有無を判定し、入力がある場合はMTEntryIDsタグの値をsplitモディファイアで分割し、配列変数entry_idsに設定します。ブログ記事IDがひとつだけの場合も配列に設定します。

その後、MTLoopタグで、配列の値をひとつずつ取り出し、MTEntryタグのidモディファイアに設定することでブログ記事情報を取得します。

インデックステンプレートに表示したい場合は、次のように全体をMTEntriesタグで括ってください。

<mt:Entries>
  …(元のブログ記事情報を出力)…
  <mt:if tag="EntryIDs">
<h2>関連ブログ記事</h2>
    <$mt:EntryIDs split="," setvar="entry_ids"$>
    <mt:loop name="entry_ids">
      <mt:if name="__first__">
<ul>
      </mt:if>
      <mt:Entries id="$__value__"> 
  <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
      </mt:Entries>
      <mt:if name="__last__">
</ul>
      </mt:if>
    </mt:loop>
  </mt:if>
</mt:Entries>

あとはブログ記事編集画面のカスタムフィールドに、表示させたいブログ記事IDを入力してください。

4.注意事項

ブログ記事数が多く、カスタムフィールドに大量のブログ記事IDを設定すると再構築時のパフォーマンスに影響が出る場合があります。

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


コメントする
greeting

*必須

*必須(非表示)


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

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

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

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