📃

【Movable Type】コンテンツタイプのデータを出力する

2024/10/14に公開

概要

管理画面「コンテンツタイプ」で設定できるフィールドの簡単な説明と出力する方法。MTのみの機能です。

コンテンツデータ一覧を出力する

ひとまず基本となる一覧の出力について。モディファイアは最低限覚えておくといいもののみ記載しています。
以下のサンプルでは、「新着情報(ID:2)」というコンテンツデータの「タイトル」「コンテンツデータの公開日」「詳細記事リンク」を出力しています。

<!-- MT記述 / 最新3件分表示 -->
<mt:Contents content_type="2" limit="3">
  <mt:ContentsHeader>
    <h2>新着情報一覧</h2>
    <ul>
  </mt:ContentsHeader>
  <mt:ContentField content_field="タイトル"><li><a href="<$mt:ContentPermalink$>"><$mt:ContentDate format="%Y.%m.%d"$>  <mt:ContentFieldValue></a></li></mt:ContentField>
  <mt:ContentsFooter>
    </ul>
  </mt:ContentsFooter>
</mt:Contents>

<!-- HTML出力 / 最新3件分表示 -->
<h2>新着情報一覧</h2>
<ul>
  <li><a href="データリンクurl">2020.09.10  タイトル3</a></li>
  <li><a href="データリンクurl">2020.09.09  タイトル2</a></li>
  <li><a href="データリンクurl">2020.09.08  タイトル1</a></li>
</ul>

とりあえず覚えておくといいモディファイア

content_type

コンテンツタイプのIDまたは名称、あるいはユニークIDのいずれかを指定する。筆者はIDで指定しています。
上記の例でいうと、「新着情報」が名称、「2」がIDになります。ユニークIDはコンテンツタイプごとに自動で割り当てられるランダムな半角英数のことです(ここでは説明を割愛)

なお、「コンテンツタイプテンプレート」で一覧出力する場合、テンプレート作成時にコンテンツタイプを指定するため、この指定したコンテンツタイプと同じ一覧を出力するのであれば、content_typeの指定は不要です。

limit

出力する記事の数を指定。MTContentsにはlastnモディファイアがなく、出力する記事の数はlimitで指定する。

一緒に覚えておくといいMTタグ

MTContentDate

記事の公開日の日付を表示する。
記事やウェブページ同様formatモディファイアで書式の選択が可能
参照:http://www.movabletype.jp/documentation/appendices/date-formats.html

MTContentID

コンテンツデータのIDを表示する。

コンテンツデータのリンクを絶対URLで出力する。

MTContentsHeader

ループ出力の一番はじめのときだけ実行されるブロックタグ。

MTContentsFooter

ループ出力の一番最後のときだけ実行されるブロックタグ。

各コンテンツフィールドの挙動と出力について

設定できるフィールドについて

コンテンツタイプ

投稿とは別のコンテンツタイプ(このフィールドを作成時にあらかじめ設定する)のデータを指定できる。
<mt:ContentFieldValue>だけだと「データ識別ラベル」の内容が出力されるので、指定したデータの中身を出力させるには<mt:ContentField></mt:ContentField>で指定したデータの各フィールドを出力させる必要がある。

以下の例では指定するデータの内容として「タイトル(テキスト)」「概要(埋め込みテキスト)」を設定しています(これらのフィールドはコンテンツタイプ名「組み込み用」として別途設定)

<!-- データ識別ラベルの内容が出力される -->
<mt:ContentField content_field="コンテンツタイプ">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 選択したデータの内容そのものが出力される -->
<mt:ContentField content_field="コンテンツタイプ">
  <mt:ContentField content_field="タイトル"><mt:ContentFieldValue></mt:ContentField><br>
  <mt:ContentField content_field="概要"><mt:ContentFieldValue></mt:ContentField>
</mt:ContentField>

テキスト

1行テキストフィールド。筆者はデータの「タイトル」などとして、一番使用することが多いフィールドです。
なお、「テキスト」の項目を必須にすると「データ識別ラベル」に設定することができ、投稿時入力の手間が省けるのでオススメです。

<mt:ContentField content_field="テキスト">
  <mt:ContentFieldValue>
</mt:ContentField>

テキスト(複数行)

記事やウェブページの「本文」と同じリッチエディタのフィールド。内容も入力された内容がhtmlタグ付きの状態で出力される。
名前の感じからなんとなくtextareaが提供されそうだけど、そうではないので注意。こちらは後述する「埋め込みテキスト」が該当。

<mt:ContentField content_field="テキスト(複数行)">
  <mt:ContentFieldValue>
</mt:ContentField>

数値

数値入力フィールド。フィールドの設定で小数点以下の設定も可。

<mt:ContentField content_field="数値">
  <mt:ContentFieldValue>
</mt:ContentField>

URL

URL入力フィールド。一見「テキスト」と同じだが、URL以外を入力すると保存時にエラーになる。
フィールドの設定時に名称を指定するとはいえパッと見て判別がつかないので、初期値にhttps://とあらかじめ値を入れておくと親切かもしれない。

<mt:ContentField content_field="URL">
  <mt:ContentFieldValue>
</mt:ContentField>

日付と時刻

日付はカレンダーピッカーが提供される。時刻は手入力。出力時、日付と時刻の間に半角スペースが入る。
カスタマイズの融通はすこし利きにくいので、日付と時刻で表示デザインを変えたい場合などは、以下それぞれ「日付」「時刻」フィールドで別々に出力させるほうがいいかも。

<mt:ContentField content_field="日付と時刻">
  <mt:ContentFieldValue>
</mt:ContentField>

日付

カレンダーピッカーが提供される。

<mt:ContentField content_field="日付">
  <mt:ContentFieldValue>
</mt:ContentField>

時刻

手入力。

<mt:ContentField content_field="時刻">
  <mt:ContentFieldValue>
</mt:ContentField>

セレクトボックス

フィールドの設定で複数選択も可。また、「名前」と「値」どちらとも日本語でも可。
フィールドの設定で「名前」に入力した項目が管理画面に選択項目として表示される(筆者の所感としてなんとなく違和感があるような気もしている…)

「名前(key)」を出力する場合は<mt:Var name="__key__">を使用する。<mt:Var name="__value__"><mt:ContentFieldValue>の出力内容はどちらも「値(value)」で同じ。

<!-- 値を出力 -->
<mt:ContentField content_field="セレクトボックス">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 名前と値を出力 -->
<mt:ContentField content_field="セレクトボックス">
  <mt:Var name="__key__"> : <mt:Var name="__value__">
</mt:ContentField>

ラジオボタン

セレクトボックス同様、「名前」と「値」どちらとも日本語でも可。フィールドの設定で「名前」に入力した項目が管理画面に選択項目として表示されるのも同じ。出力についても同様。

<!-- 値を出力 -->
<mt:ContentField content_field="ラジオボタン">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 名前と値を出力 -->
<mt:ContentField content_field="ラジオボタン">
  <mt:Var name="__key__"> : <mt:Var name="__value__">
</mt:ContentField>

チェックボックス

セレクトボックス同様、フィールドの設定で複数選択も可。「名前」と「値」どちらとも日本語でも可。フィールドの設定で「名前」に入力した項目が管理画面に選択項目として表示されるのも同じ。出力についても同様。

<!-- 値を出力 -->
<mt:ContentField content_field="チェックボックス">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 名前と値を出力 -->
<mt:ContentField content_field="チェックボックス">
  <mt:Var name="__key__"> : <mt:Var name="__value__">
</mt:ContentField>

アセット

アセットファイルフィールド。筆者はPDFやExcel、Wordファイルの指定先としてこのフィールドを使用しています。
<mt:ContentFieldValue>だけだとアセットIDが表示されてしまうので、出力にはひと手間必要。

<!-- アセットIDが出力される -->
<mt:ContentField content_field="アセット">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 出力例 -->
<mt:ContentField content_field="アセット">
  <a href="<$mt:AssetURL$>"><$mt:AssetFileName$></a>
</mt:ContentField>

オーディオアセット

アセット同様、<mt:ContentFieldValue>だけだとアセットIDが表示されてしまうので、出力にはひと手間必要。

<!-- オーディオアセットIDが出力される -->
<mt:ContentField content_field="オーディオアセット">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 出力例 -->
<mt:ContentField content_field="オーディオアセット">
  <audio src="<$mt:AssetURL$>" preload="metadata" controls></audio>
</mt:ContentField>

ビデオアセット

アセット同様、<mt:ContentFieldValue>だけだとアセットIDが表示されてしまうので、出力にはひと手間必要。

<!-- ビデオアセットIDが出力される -->
<mt:ContentField content_field="ビデオアセット">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 出力例 -->
<mt:ContentField content_field="ビデオアセット">
  <video src="<$mt:AssetURL$>" preload="metadata" controls muted></video>
</mt:ContentField>

画像アセット

アセット同様、<mt:ContentFieldValue>だけだとアセットIDが表示されてしまうので、出力にはひと手間必要。

<!-- 画像アセットIDが出力される -->
<mt:ContentField content_field="画像アセット">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 出力例 -->
<mt:ContentField content_field="画像アセット">
  <figure><img src="<$mt:AssetURL$>" alt="画像"></figure>
</mt:ContentField>

埋め込みテキスト

名称がわかりづらいが、textaraに該当するフィールド。装飾が不要のテキストのみの入力であれば、こちらの使用をオススメします。
グローバルモディファイアnl2br="1"を使用すると、改行を出力することができる。

<mt:ContentField content_field="埋め込みテキスト">
  <mt:ContentFieldValue nl2br="1">
</mt:ContentField>

カテゴリ

「カテゴリセット」で作成したカテゴリ(フィールド作成時にあらかじめ設定)を指定する。
<mt:ContentFieldValue>だけだとカテゴリIDが表示されてしまうので、出力にはひと手間必要。

<!-- カテゴリIDが出力される -->
<mt:ContentField content_field="カテゴリ">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 出力例(カテゴリ名の表示) -->
<mt:ContentField content_field="カテゴリ">
  <mt:CategoryLabel>
</mt:ContentField>

タグ

用意されるのは記事やウェブページと同じテキストフィールドなので、手入力やカンマ区切りが必要。
<mt:ContentFieldValue>だけだとタグIDが表示されてしまうので、出力にはひと手間必要。

<!-- タグIDが出力される -->
<mt:ContentField content_field="タグ">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 出力例(タグ名の表示) -->
<mt:ContentField content_field="タグ">
  <mt:TagName>
</mt:ContentField>

リスト

テキストフィールドとして用意される。項目数はデータ入力時に任意で増減が可能。

<mt:ContentField content_field="リスト">
  <mt:If name="__first__">
    <ul>
  </mt:If>
      <li><mt:ContentFieldValue></li>
  <mt:If name="__last__">
    </ul>
  </mt:If>
</mt:ContentField>

テーブル

文字色や背景色などの装飾設定はできないが、セルの結合や分割、見出し(th)設定など、そこそこ複雑な表を作成することができる。

<mt:ContentField content_field="テーブル">
  <mt:ContentFieldValue>
</mt:ContentField>

<!-- 以下は出力した表のhtml例 -->
<table>
  <tr>
    <td colspan="2" class="center">th</td>
  </tr>
  <tr>
    <td class="center">td</td>
    <td class="center">td</td>
  </tr>
  <tr>
    <td class="center">td</td>
    <td class="center">td</td>
  </tr>
</table>

テキスト表示エリア

管理画面でのみ表示されるテキストフィールド(textareaに相当)

<!-- テンプレートに書いても出力されない -->
<mt:ContentField content_field="テキスト表示エリア">
  <mt:ContentFieldValue>
</mt:ContentField>

補足・注意事項など

フィールドの入力有無で条件分岐したい場合

mt:ifを使用して分岐できる。
以下は「概要」というフィールドを用意して、内容が入力されている場合のみ出力したい場合。

<mt:If tag="ContentField" content_field="概要">
  <mt:ContentField content_field="概要">
    <mt:ContentFieldValue>
  </mt:ContentField>
</mt:If>

以下はチェックボックスのチェック有無で表示を分ける場合。
この例で用意するフィールドとして、以下を設定しています。

  • フィールド:チェクボックス
  • 名前:チェックボックス
  • 選択できる最小件数:0
  • 選択できる最大件数:1
    • 名前:出力する
    • 値:check
<mt:If tag="ContentField" content_field="チェックボックス">
  <!-- チェックが入っていれば出力する内容 -->
<mt:Else>
  <!-- チェックが入っていなければ出力する内容 -->
</mt:If>

セレクトボックス・ラジオボタン・チェックボックスの名前と値

先述のとおり、これらはそれぞれ以下で出力できます。

名前:<mt:Var name="__key__">
値:<mt:Var name="__value__">または<mt:ContentFieldValue>

フィールド設定時の注意事項として、これらのフィールドは項目を変更する際、値(value)を変更すると、それまでコンテンツデータで投稿していた該当箇所のチェックが外れてしまうようです。名前(key)は変更してもチェックは維持されるようです。

公式リファレンス

すべて掲載しきれないので、大枠のもののみ記載しています。

Discussion