【Movable Type】カスタムフィールドを出力する
概要
管理画面「カスタムフィールド」で設定できるフィールドの簡単な説明と出力する方法。
カスタムフィールドを利用することで、記事やウェブページの投稿、カテゴリやフォルダの設定などに幅を持たせることが可能です。
なお、PowerCMSはMT以上に標準で作成できるカスタムフィールドや拡張機能の種類がありますが、以下内容はMTで作成できるカスタムフィールドに絞って解説しています(これらの内容はPowerCMSでも同様)
カスタムフィールド作成時の設定項目について
以下はカスタムフィールド作成時の設定項目について、簡単に説明しています。
管理画面「システム」(左メニュー上部が灰色帯の画面)で作成されたカスタムフィールドは、すべてのサイトに共通で適用されます。
なお、カスタムフィールドにはいくつか制限事項があります(テキストフィールドの最大入力値は255文字までなど)
詳細は以下公式リファレンスをご参照ください。
システムオブジェクト
作成したカスタムフィールドを適用するオブジェクトを指定する。
記事
記事の投稿・編集画面に表示される。
作成したカスタムフィールドは、記事の項目としてMTEntries
のループ内や記事内容の出力時に使用できます。
ウェブページ
ウェブページの投稿・編集画面に表示される。
作成したカスタムフィールドは、ウェブページの項目としてMTPages
のループ内やウェブページ内容の出力時に使用できます。
コメント
コメントの投稿フォーム、また管理画面コメント編集画面に表示される。
本記事では触れませんが、コメントオブジェクトで作成したカスタムフィールドは、コメントの投稿フォームに入力項目として表示することが可能です。
アセット
オーディオ・ビデオ・画像以外のファイル(PDFなど)編集画面に表示される。
作成したカスタムフィールドは、アセットファイルの情報として出力時に使用できます。
オーディオ
オーディオファイル編集画面に表示される。
作成したカスタムフィールドは、オーディオファイルの情報として出力時に使用できます。
ビデオ
ビデオファイル編集画面に表示される。
作成したカスタムフィールドは、ビデオファイルの情報として出力時に使用できます。
画像
画像ファイル編集画面に表示される。
作成したカスタムフィールドは、画像ファイルの情報として出力時に使用できます。
カテゴリ
カテゴリ編集画面に表示される。
作成したカスタムフィールドは、カテゴリの項目としてカテゴリ出力時に使用できます。
フォルダ
フォルダ編集画面に表示される。
作成したカスタムフィールドは、フォルダの項目としてカテゴリ出力時に使用できます。
テンプレート
テンプレート編集画面に表示される。
筆者はひとつ前のテンプレートのバックアップ用やメモとして、この項目を使用することが多いです。
子サイト
システムおよび子サイトでのみ選択可能。管理画面「設定(全般)」に表示される。
作成したカスタムフィールドは、子サイトの設定項目として出力可能です。
サイト
管理画面「設定(全般)」に表示される。
作成したカスタムフィールドは、サイトの設定項目として出力可能です。
ユーザー
システムでのみ選択可能。管理画面「設定(全般)」に表示される。
作成したカスタムフィールドは、ユーザーの設定項目として出力可能です。
名前
カスタムフィールドの名称を入力する。
ここで入力した内容が項目として表示されます。
説明
カスタムフィールドの説明を入力する。
入力した内容がフィールドの説明文として表示されます。
種類
以下からカスタムフィールドの種類を選ぶ。
種類の詳細については後述する出力の項目で説明しています。
- テキスト
- テキスト(複数行)
- チェックボックス
- URL
- 日付と時刻
- ドロップダウン
- ラジオボタン
- 埋め込みオブジェクト
- アセット
- オーディオ
- ビデオ
- 画像
オプション
以下のカスタムフィールドの種類は、追加でオプションを指定する。
日付と時刻
「日付と時刻」「日付」「時刻」いずれかの入力タイプを選ぶ。
ドロップダウン / ラジオボタン
選択項目を,(カンマ)
区切りで指定する。
オプションの項目は表示値(=DBの保存値)
のみ指定をすると、項目を変更した場合、既存記事で指定した値は元のまま変更されない。
保存値1=表示値1,保存値2=表示値2...
というように保存値=表示値
の形で指定をしておくと、DBには保存値
の値が保存され、表示値
を変更しても既存記事に影響を与えないので、こちらの指定をオススメします。
出力の方法は各フィールドで説明しています。
必須?
カスタムフィールドを入力必須にする場合はチェックを入れる。
チェックを入れたフィールドは、入力欄表示に必須マークが入ります。
規定値
あらかじめフィールドに入力しておく値を設定する。
ベースネーム
カスタムフィールドのベースネーム(一意のもの)を指定する。
テンプレートタグ
カスタムフィールドの出力時に利用するテンプレートタグを指定する。任意の名称(半角英数と-(ハイフン)
_(アンダーバー)
)で指定可能
カテゴリ / フォルダ
カスタムフィールドの作成時に以下の要件を満たす場合、カスタムフィールド作成後の編集画面にこの項目が表示される。
- システムオブジェクトが「記事」「ウェブページ」のいずれか
- 記事の場合は「カテゴリ」、ウェブページの場合は「フォルダ」が1つ以上作成されている
カスタムフィールド編集画面でチェックを入れたカテゴリ(あるいはフォルダ)が記事(あるいはウェブページ)でチェックされている場合、カスタムフィールドを表示するかどうかを選択できます。
チェックされていなければ、すべて表示されます。
各カスタムフィールドの挙動と出力について
以下、各フィールドの説明において、テンプレートタグはcf_xxx
としています。
入力必須や分岐として記述しないのであれば、<mt:If tag="cf_xxx"></mt:If>
の囲みは不要です。
テキスト
1行テキストフィールド。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
テキスト(複数行)
textarea
に相当する複数行テキストフィールド。
ファンクションタグにnl2br="1"
モディファイアを指定することで、改行処理が可能です。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
チェックボックス
チェックボックスフィールド。値として設定できるのは1つのみで、ドロップダウンやラジオボタンのように複数項目にはできない。
以下の例では、チェックが入っていれば1(true)
を返します。条件分岐として利用することの多いフィールド。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
URL
URL入力フィールド。一見「テキスト」と同じだが、URL以外を入力すると保存時にエラーになる。
フィールドの設定時に名称を指定するとはいえパッと見て「テキスト」との判別がつかないので、初期値にhttps://
とあらかじめ値を入れておくと親切です。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
日付と時刻
日付はカレンダーピッカーが提供される。時刻は手入力。出力時、日付と時刻の間に半角スペースが入る。
カスタマイズの融通はすこし利きにくいので、日付と時刻で表示デザインを変えたい場合などは、このカスタムフィールドを2つ用意し、それぞれオプションで「日付」「時刻」を選択して別々に出力させるほうがいいかも。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
ドロップダウン
ドロップダウンメニューフィールド。MTのドロップダウンは複数選択はできず、どれか1つを選ぶのみ。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
オプション項目で表示値
のみ指定している場合は、上記の記述で表示値
が出力されます。
保存値=表示値
で指定している場合は保存値
が出力されるので、表示値
を出力するには一手間必要。
<!-- 保存値=表示値で「表示値」を出力する -->
<mt:If tag="cf_xxx">
<$mt:cf_xxx setvar="dropdown"$>
<$mt:cf_xxx label="$dropdown"$>
</mt:If>
カスタムフィールドのファンクションタグにsetvar
モディファイアを付与していったん変数に格納し、再度ファンクションタグにlabel
モディファイアを付与して変数を値とすることで、表示値
の出力が可能です。
ラジオボタン
ラジオボタンフィールド。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
ドロップダウン同様、オプション項目で表示値
のみ指定している場合は、上記の記述で表示値
が出力されます。
保存値=表示値
で指定している場合は保存値
が出力されるので、表示値
を出力するには一手間必要。
<!-- 保存値=表示値で「表示値」を出力する -->
<mt:If tag="cf_xxx">
<$mt:cf_xxx setvar="radio"$>
<$mt:cf_xxx label="$radio"$>
</mt:If>
カスタムフィールドのファンクションタグにsetvar
モディファイアを付与していったん変数に格納し、再度ファンクションタグにlabel
モディファイアを付与して変数を値とすることで、表示値
の出力が可能です。
埋め込みオブジェクト
YouTubeやGoogle Maps、scriptなどの埋め込みコードを入力するフィールド。
一見「テキスト(複数行)」と同じで、デフォルトの状態では「テキスト(複数行)」でもこれらのコードを埋め込んで表示させることは可能だが、フィールドが用意されているので、コード埋め込みの場合はこちらを使っておくのがよさそう。
XSSには注意。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
アセット
アセットファイルフィールド。
そのままだと以下のようにリンクつきのHTMLが出力される。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
<!-- 出力結果 -->
<span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="アセットファイルURL">アセットファイル名</a></span>
自分でカスタマイズしたい場合は一手間必要。
<mt:If tag="cf_xxx">
<mt:cf_xxxAsset><a href="<$mt:AssetURL$>"><$mt:AssetLabel$></a></mt:cf_xxxAsset>
</mt:If>
カスタムフィールドのテンプレートタグ末尾にAsset
をつけてブロックタグとし、この中でMTAssetURL
などを使用して出力する(以下オーディオ・ビデオ・画像共通)
この場合の機能はMTAssets
と同様。
オーディオ
オーディオアセットフィールド。
そのままだと以下のようにリンクつきのHTMLが出力される。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
<!-- 出力結果 -->
<span class="mt-enclosure mt-enclosure-audio" style="display: inline;"><a href="オーディオファイルURL">オーディオファイル名</a></span>
アセット同様、自分でカスタマイズしたい場合は一手間必要。
<mt:If tag="cf_xxx">
<mt:cf_xxxAsset><audio src="<$mt:AssetURL$>" preload="metadata" controls></audio></mt:cf_xxxAsset>
</mt:If>
ビデオ
ビデオアセットフィールド。
そのままだと以下のようにリンクつきのHTMLが出力される。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
<!-- 出力結果 -->
<span class="mt-enclosure mt-enclosure-video" style="display: inline;"><a href="ビデオファイルURL">ビデオファイル名</a></span>
アセット同様、自分でカスタマイズしたい場合は一手間必要。
<mt:If tag="cf_xxx">
<mt:cf_xxxAsset><video src="<$mt:AssetURL$>" preload="metadata" controls muted></video></mt:cf_xxxAsset>
</mt:If>
画像
画像アセットフィールド。
そのままだと以下のようにリンクつきのHTMLが出力される。
<mt:If tag="cf_xxx">
<$mt:cf_xxx$>
</mt:If>
<!-- 出力結果 -->
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="画像ファイルURL">画像ファイル名</a></span>
アセット同様、自分でカスタマイズしたい場合は一手間必要。
<mt:If tag="cf_xxx">
<mt:cf_xxxAsset><figure><img src="<$mt:AssetURL$>" alt="<$mt:AssetLabel$>"></figure></mt:cf_xxxAsset>
</mt:If>
公式リファレンス
MT
- https://www.movabletype.jp/documentation/mt8/designers-guide/manage-customfields/usage-of-customfield/
- https://www.movabletype.jp/documentation/mt8/designers-guide/manage-customfields/kind-of-customfield/
Discussion