株式会社HAMWORKS
🤖

MT7のcontent_field="XXX"やcontent_type="XXX"などの名前は変数に格納しておくと便利

2018/08/01に公開

MT7からコンテンツタイプが使えるようになり、自由なフィールドを設定できるようになりました。
従来のカスタムフィールドと違う点はカスタムフィールドタグ設定するのではなく、mt:ContentFieldという新たなタグの中にcontent_field="フィールドに定義した名前"をブロックで囲みmt:ContentFieldValueで出力するような形になりました。
実装サンプルソースは以下になります。

// https://www.movabletype.jp/documentation/appendices/tags/contentfield.html ドキュメント参照
<mt:Contents content_type="イベント・セミナー" limit="1">
<mt:ContentField content_field="開催日時"><mt:ContentFieldValue language="ja" /><mt:Else>開催日時は未定です</mt:ContentField>
</mt:Contents>

このようにmt:Contentsにはコンテンツデータ名をセットして、mt:ContentFieldにはコンテンツデータにセットした任意のフィールド名を設定します。
コンテンツタイプは従来の記事やブログの関係と違い自由に使い回せることが目的に作られたものかと思います。
そのため案件ベースになると、設定したラベルが色々なテンプレートで使用することになります。
従来のテンプレート実装でもよく使う config テンプレートにラベルを定義しておくと仮にラベル名が変わっても 一回所だけの変更で済むかと思います。

// config.mtml ※テンプレートモジュールでどのテンプレートも参照するモジュール
<mt:SetVars>
contents_type_DataName=コンテンツタイプデータ名
content_field_DataName_FieldName=コンテンツフィールド名
</mt:SetVars>
  • SetVars内に必要なフィールド名を定義
  • 接頭辞 contents_type_XXX コンテンツデータ名
  • 接頭辞 field_DataName_FieldName コンテンツフィールド名
// 出力テンプレ インデックステンプレートなど
<mt:Contents content_type="$contents_type_DataName" limit="0">
  <mt:ContentField content_field="$content_field_DataName_FieldName"><mt:ContentFieldValue /></mt:ContentField>
</mt:Contents>

コンテンツタイプは自由に設定できる反面、定義したフィールド名の管理は重要になります。
設定値としてテンプレートにもたせておくことをおすすめしておきます。

また、mt:BlogIDのようにmt:ContentIDも設定しておきたかったのですが、
mt:ContentIDは、単体で利用することが出来ず必ずmt:Contentsで括らなければなりません。
mt:Contentsは一覧使用するタグだと思うので、記事データがなければmt:ContentIDを取り出すことが出来ません。
IDなどの使用はよくDataAPIなどのパスに含まれるIDでも使用するので、本番と開発で動的にIDが変わっても対応できるようにしたいと思ったのですが現時点では出来ないようです。この部分はmt:ContentIDにモディファイアなどをつけて単体利用できるように改善してほしいですね。。

株式会社HAMWORKS
株式会社HAMWORKS

Discussion