以前に「Movable Typeで記事登録後にカスタムフィールドを追加する時の注意点」という記事を公開しましたが、コンテンツタイプ で同じようなことをする機会があったので、実装を試してみました。
サンプルコード
フィールドを追加しないでコンテンツタイプを用意して、一覧を出力するテンプレートを用意します。
1 2 3 4 5 6 7 | < ul > < mt:Contents content_type = "xxxxx" > < li > < mt:ContentLabel > </ li > </ mt:Contents > </ ul > |
データ識別ラベルを「投稿A」「投稿B」で2件登録します。
この状態で再構築すると、以下のような出力になります。
1 2 3 4 | < ul > < li >投稿B</ li > < li >投稿A</ li > </ ul > |
コンテンツタイプ にフィールドを追加してみます。
- 種類:テキスト
- 名前:追加
- 初期値:初期値
コンテンツタイプの新規登録を行うと、以下のように初期値が入った状態で追加フィールドが表示されます。
逆に先ほど登録した「投稿A」は、追加フィールドに値が入っていない状態になります。
これは追加フィールドの値がそれまでのコンテンツタイプ のデータに入っていないためです。
この状態で追加したフィールドが出力されるようにテンプレートを修正して、出力を試してみます。
1 2 3 4 5 6 7 8 9 10 | < ul > < mt:Contents content_type = "xxxxx" > < li > < mt:ContentLabel > < mt:ContentField content_field = "追加" > < mt:ContentFieldValue > </ mt:ContentField > </ li > </ mt:Contents > </ ul > |
テンプレート変更後、追加フィールドの値は初期値のままで投稿Cを新しく登録します。
再構築を行うと、後から追加した投稿Cのみ追加フィールドの値が出力されました。
1 2 3 4 5 6 7 8 9 10 11 12 | < ul > < li > 投稿C 初期値 </ li > < li > 投稿B </ li > < li > 投稿A </ li > </ ul > |
値が入っていない過去のデータを初期値と同じにしたい、あるいは別の値を設定したい場合、MTElseでデータのない場合の設定を行えます。
1 2 3 4 5 6 7 8 9 10 11 12 | < ul > < mt:Contents content_type = "xxxxx" > < li > < mt:ContentLabel > < mt:ContentField content_field = "追加" > < mt:ContentFieldValue > < mt:Else > 初期値(仮) </ mt:ContentField > </ li > </ mt:Contents > </ ul > |
これで値のなかった投稿Aと投稿Bにも値が出力されました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | < ul > < li > 投稿C 初期値 </ li > < li > 投稿B 初期値(仮) </ li > < li > 投稿A 初期値(仮) </ li > </ ul > |
コメントが承認されるまで時間がかかります。