📃

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

に公開

概要

MTの「コンテンツタイプ」で設定できる各フィールドの概要と出力について解説しています。

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

コンテンツタイプにおいては、対応するコンテンツデータで作成するデータが記事に該当します。作成したコンテンツデータはMTContentsを利用して一覧を出力することが可能です。

以下の例では、「新着情報(ID: 2)」というコンテンツタイプのデータを新着順に3件分出力しています。コンテンツタイプのフィールドには、「タイトル」という名称でテキストフィールドを用意しています。

<!-- MT記述 / 最新3件分表示 -->
<mt:Contents content_type="2" limit="3">
  <mt:ContentsHeader>
    <h2><$mt:ContentTypeName$>一覧</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

先述の例でいうと、「新着情報」が名前、「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

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

MTContentsFooter

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

MTContentTypeName

コンテンツタイプの名前を表示する。

MTContentTypeDescription

コンテンツタイプの説明を表示する。

MTContentTypeID

コンテンツタイプのIDを出力する。

コンテンツタイプで利用できる各フィールドの概要と出力・挙動について

コンテンツタイプで設定できる各フィールドについて解説しています。

コンテンツタイプ

投稿とは別のコンテンツタイプのデータを指定するフィールド。指定先のコンテンツタイプとフィールドはあらかじめ作成しておく必要がある。

以下の例では、指定するデータの内容として「タイトル(テキスト)」「概要(埋め込みテキスト)」を設定しています。

<!-- データ識別ラベルの値のみが出力される -->
<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>

<mt:ContentFieldValue>のみだと「データ識別ラベル」で指定したテキストフィールドあるいは手入力した値のみが出力されます。指定したデータの中身を出力させるには、MTContentFieldを利用します。

テキスト

1行テキストの入力フィールド。

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

なお、テキストフィールドを「必須」にすると、コンテンツタイプの設定(編集)画面で「データ識別ラベル」の値として利用することが可能です(後述します)

テキスト(複数行)

記事やウェブページの「本文」と同じエディタの入力フィールド。

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

カスタムフィールドにも同名のものがあり、その感覚からtextareaが提供されると思いきや、そうではないので注意。textareaは後述の「埋め込みテキスト」が該当します。

数値

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

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

URL

URLの入力フィールド。

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

一見するとただのテキストフィールドですが、URLフィールドではURL以外を入力すると保存時にバリデーションチェックに引っかかります。

日付と時刻

日付および時刻の入力フィールド。フォーマットはYYYY-MM-DD HH:mm:ss
日付はカレンダーピッカーが提供される。時刻は手入力。出力時、日付と時刻の間に半角スペースが入る。

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

カスタマイズの融通はあまり利かないので、日付と時刻で表示デザインを変えたい場合などは、次で紹介する「日付」「時刻」フィールドでそれぞれ処理することをオススメします。

日付

日付の入力フィールド。フォーマットはYYYY-MM-DD
カレンダーピッカーが提供される。

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

時刻

時刻の入力フィールド。フォーマットはHH:mm:ss
手入力する。

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

セレクトボックス

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

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

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

「名前(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>

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

アセット

アセットファイルの指定フィールド。

<!-- アセット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が出力されるため、ファイルのURLを出力する場合はMTAssetURLを利用します。

オーディオアセット

オーディオファイルの指定フィールド。

<!-- オーディオアセット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が出力されるため、ファイルのURLを出力する場合はMTAssetURLを利用します。

ビデオアセット

ビデオファイルの指定フィールド。

<!-- ビデオアセット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が出力されるため、ファイルのURLを出力する場合はMTAssetURLを利用します。

画像アセット

画像ファイルの指定フィールド。

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

<!-- 出力例 -->
<mt:ContentField content_field="画像アセット">
  <figure><img src="<$mt:AssetURL$>" alt="画像" width="<$mt:AssetProperty property='image_width'$>" height="<$mt:AssetProperty property='image_height'$>"></figure>
</mt:ContentField>

<mt:ContentFieldValue>のみだと画像アセットIDが出力されるため、ファイルのURLを出力する場合はMTAssetURLを利用します。

埋め込みテキスト

複数テキストの入力フィールド(textaraに該当)

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

グローバルモディファイアnl2br="1"を使用すると、改行位置に<br>タグが挿入された状態で出力されます。

カテゴリ

カテゴリを指定するフィールド。カテゴリははあらかじめ「カテゴリセット」で作成しておく必要がある。
複数選択を許可した場合は、最初に表示されるカテゴリが「プライマリカテゴリ」となる(太字で表示される)

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

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

<mt:ContentFieldValue>のみだとカテゴリIDが出力されるため、MTCategoryLabelなどカテゴリ表示のためのファンクションタグを利用します。

タグ

タグの入力フィールド。記事やウェブページ同様、タグは手入力。

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

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

<mt:ContentFieldValue>のみだとカテゴリIDが出力されるため、MTTagNameなどタグ表示のためのファンクションタグを利用します。

リスト

リストの入力フィールド(増減可能な1行テキストフィールド)

<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>

なお、このフィールドはテンプレートに記述しても出力されません。

コンテンツタイプの設定・データ出力についての補足事項

コンテンツタイプの設定や出力時の補足や留意事項について解説しています。

データ識別ラベルについて

コンテンツデータで作成する記事(データ)は、記事ごとに「データ識別ラベル」を指定する必要があります。この「識別ラベル」に利用する値はコンテンツタイプの設定(編集)画面で、以下いずれかを指定します。

  • 入力が「必須」に設定されているテキストフィールド
  • ユーザーによる手入力(記事作成のたびに毎回入力)

ユーザーによる毎回手入力は負担も大きいため、記事のタイトルなどの用途でテキストフィールドを利用している場合は、必須項目としてこれを「データ識別ラベル」に指定することをオススメします。

フィールド入力の有無で条件分岐する

用意したフィールドに値が入力されているかどうかで条件分岐をしたい場合は、MTIfMTUnlessを利用します。tagモディファイアの値にはContentFieldを指定し、content_fieldモディファイアの値にはフィールドの名前を指定します。

以下の例では、「概要」というフィールドを用意して、内容が入力されている場合のみ出力しています。

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

セレクトボックス・ラジオボタン・チェックボックス・カテゴリでの条件分岐

上記同様、MTIfMTUnlessを利用します。tagモディファイアの値にはContentFieldを指定し、content_fieldモディファイアの値にはフィールドの名前を指定します。

選択(チェック)の有無で条件分岐する

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

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

セレクトボックス・ラジオボタン・カテゴリの場合も記述方法は同じです。この記述方法では、セレクトボックス・チェックボックス・カテゴリで複数選択を許可している場合は、いずれかが選択(チェック)されていれば真(true)となります。

特定の値が選択(チェック)されているかどうかで条件分岐する

以下の例では、カテゴリフィールドにおいて「カテゴリA」が選択されているかどうかで表示を分けています。

<mt:ContentField content_field="カテゴリ">
  <mt:If tag="CategoryLabel" eq="カテゴリA">
    <!-- カテゴリAであれば出力する内容 -->
  <mt:Else>
    <!-- カテゴリAでなければ出力する内容 -->
  </mt:If>
</mt:ContentField>

以下の例では、セレクトボックスフィールドにおいて「セレクトA」が選択されているかどうかで表示を分けています。ラジオボタンやチェックボックスの場合も同様です。

<mt:ContentField content_field="セレクトボックス">
  <mt:If name="__key__" eq="セレクトA">
    <!-- セレクトAであれば出力する内容 -->
  <mt:Else>
    <!-- セレクトAでなければ出力する内容 -->
  </mt:If>
</mt:ContentField>

セレクトボックス・チェックボックス・カテゴリで複数選択を許可している場合、上記の例では選択(チェック)している値ごとに条件分岐の処理が入ります。

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

セレクトボックス・ラジオボタン・チェックボックスで設定した名前と値は、それぞれ以下で出力できます。

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

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

公式リファレンス

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

Discussion