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