株式会社HAMWORKS
🤖

Movable Type 7 テーマ YAMLについて

2018/10/28に公開

Movable Type 7からコンテンツタイプが実装されたことにより、YAMLに定義できる値が増えたので紹介します。
テーマ開発するときの指標になればと思います。

はじめに

Movable Type 7から コンテンツタイプテンプレート という新たなテンプレートを設定することが可能です。
まだ公式サイトには、 コンテンツタイプテンプレート については明記されていないため個人の所感としてこの記事で紹介します。

https://www.movabletype.jp/documentation/mt7/designers-guide/

MT6でブログ・記事管理をしつつ必要なカスタムフィールドを定義しつつ出力したいページに出していました。
※メインビジュアル管理用ブログなどブログ自体にページは管理せずデータのみを管理したい場合
MT7では記事やブログを分けずに任意でメインビジュアルだけを管理するデータタイプ(複数可)を作ることが可能です。

コンテンツタイプ自体は、さまざまなケース(利用用途)を想定したものになります。
今回はウェブサイトをベースを想定しつつ、従来の記事やブログ管理を比較した形の紹介になります。

コンテンツタイプテンプレートとは?

まずコンテンツタイプテンプレートには、2つの種類から選ぶことができます。
また、どちらもどのデータタイプを参照するかを設定することが可能です。
従来では1ブログ 記事 or ウェブページ = アーカイブテンプレート の参照先だったのでとくに指定せずにテンプレートを作成できました。
コンテンツタイプからは、1ウェブサイト・1子サイト複数のコンテンツタイプを定義できるためテンプレート単位でデータタイプを選べるようになっています。

  • コンテンツタイプリストアーカイブ
  • コンテンツタイプ アーカイブ

コンテンツタイプリストアーカイブ

コンテンツタイプリストアーカイブは、従来のアーカイブテンプレートで使用していた記事のカテゴリ・年別などのコンテンツタイプ版という認識で問題ないと思います。

コンテンツタイプ アーカイブ

コンテンツタイプ アーカイブは、従来のアーカイブテンプレートで使用していた記事やウェブページに相当するコンテンツタイプ版という認識で問題ないと思います。

コンテンツデータについて

新たにコンテンツタイプで作成されたデータは、コンテンツデータとして格納されます。
コンテンツデータ単位でテンプレート(リストや単体)を出すことも可能ですし、他のテンプレートから呼び出すことも可能です。
※メインビジュアルだけを管理するコンテンツデータを作成してメインテンプレートで出力するなど、要件次第で自由に設計が可能

YAMLについて

上記のコンテンツタイプが加わったことでYAMLで定義する値を紹介します。

template_set

template_setでは、ctがコンテンツタイプテンプレートで使用するkeyになります。
テンプレートの構文は以下のようになります。

名称 用途
ct コンテンツタイプテンプレートのkey名
template_pages テンプレートのファイル名(templates/template_pages.mtml)
content_type コンテンツタイプ名
label テンプレートのラベル
mappings アーカイブマッピングを項目
archive_type アーカイブマッピングの種類(ContentType)
category_field コンテンツフィールドでカテゴリを指定
file_template アーカイブパスを指定
preferred アーカイブの非優先・優先を指定(0:非優先・1:優先)
  template_set:
    component: ~
    data:
      base_path: templates
      label: 'exported_template set'
      templates:
        ct:
          template_pages:
            content_type: '固定ページ'
            label: 'pages.html'
            mappings:
              contenttype:
                archive_type: ContentType
                category_field: 'フォルダ'
                file_template: '%-c/%-f'
                preferred: 1
    importer: template_set

default_content_types

default_content_typesは、コンテンツデータで定義しているコンテンツフィールドを指定します。
template_setで指定した固定ページのフィールドを作成します。

コンテンツデータを複数指定する場合は、dataの直下にあるインデント6個目のハイフンの改行ごとに階層表現することで指定することが可能です。
フィールドのtypeについては今回の記事には掲載せず、別途一覧としてまとめる予定です。
フィールドのtypeごとに指定できる値が異なるためすべてを網羅できていないため、随時更新予定です。

    data:
      -
        ここにコンテンツデータの情報を入力
      -
        ここにコンテンツデータの情報を入力
名称 用途
description コンテンツデータの説明
fields コンテンツデータのフィールド項目
data_label フィールドをデータ識別ラベルに設定する場合使用(0:未設定・1設定)
display フィールドの表示有無の設定(force:常に表示)
initial_value 入力項目の初期値
label フィールドのラベル
max_length 最大の文字数
min_length 最小の文字数
order フィールドの並び順を指定
required 必須の有無(0:任意・1:必須)
type フィールドのタイプを指定
can_add カテゴリの追加の有無(0:追加なし・1:追加あり)
category_set カテゴリセットを指定
max カテゴリの最大設定可能数
min カテゴリの最小設定可能数
multiple カテゴリの複数選択の有無(0:なし・1:あり)
user_disp_option 調査中:作成したユーザのidの予想かコンテンツタイプのユーザ単位で表示有無が可能か
  default_content_types:
    component: ~
    data:
      -
        description: '固定ページのコンテンツタイプ'
        fields:
          -
            data_label: 1
            description: ''
            display: force
            initial_value: ''
            label: 'ページタイトル'
            max_length: 255
            min_length: 0
            order: 1
            required: 1
            type: single_line_text
          -
            can_add: 0
            category_set: 'フォルダグループ'
            description: ''
            display: force
            label: 'フォルダ'
            max: 1
            min: 1
            multiple: 0
            order: 2
            required: 0
            type: categories
          -
            description: ''
            display: force
            initial_value: ''
            label: '概要'
            order: 3
            required: 0
            type: embedded_text
          -
            description: ''
            display: force
            initial_value: ''
            input_format: 0
            label: 'ページ本文'
            order: 4
            required: 1
            type: multi_line_text
        name: '固定ページ'
        user_disp_option: 1

default_category_sets

MT7からカテゴリセットという機能が追加されています。
従来の記事 = カテゴリではなく、コンテンツタイプごとに任意のカテゴリを作成できるようになっています。
複数のコンテンツタイプで同じカテゴリを指定することも可能です。

コンテンツタイプ同様にカテゴリセットも複数指定することは可能です。
dataの直下にある任意のkey名 FolderGroup を指定し設定できます。

現在のMT7のカテゴリセットのカテゴリ単位で任意のフィールドは出来ません。
そのため従来のようなカテゴリにkeywordのフィールドをCF追加しての運用は現在のバージョンでは出来ないため別の方法を考えなければなりません。

    data:
      FolderGroup:
        categories:
          ここにカテゴリの情報を入力
      CategoryGroup:
        categories:
          ここにカテゴリの情報を入力
名称 用途
FolderGroup カテゴリセットのkey名(複数ある場合は被らない名称にすること)
categories カテゴセットの項目
":order": カテゴリの並び順
description カテゴリの説明
label カテゴリのラベル名を指定
name カテゴリセットの名前を指定
  default_category_sets:
    component: ~
    data:
      FolderGroup:
        categories:
          ":order":
          - about
          - access
          about:
            description: '概要のフォルダ'
            label: '概要'
          access:
            description: 'アクセスのフォルダ'
            label: 'アクセス'
        name: 'フォルダグループ'

テーマの再適用について

コンテンツデータとコンテンツタイプテンプレートと紐付けるため、従来のようにCFだけを削除してテーマの適用という方法は出来ません。
すでに紐づけているコンテンツデータとコンテンツタイプテンプレートがある場合は、以下のような手順で削除しなければいけません。

  • コンテンツタイプテンプレートを削除する
  • コンテンツデータを削除する
  • テーマを再適用する

確認したところコンテンツデータ自体を削除してしまうと、すでに登録したデータが消えてしまいます。
DB自体を削除するためCFのように登録データを残した形で再適用ができないので注意が必要です。
コンテンツフィールドの追加などは削除せずにそのまま反映しましたが、リネームやフィールドの整理などを行ったときにコンテンツタイプ自体が可能性があります。
テーマで管理していく場合は、ある程度実装が進んだタイミングで再適用などは控えたほうが良さそうです。

MT7のテーマについて

MT7用のテーマは、シックス・アパートから提供されているmont-blancやJungfrauがあります。
MT6から使用している私のテーマもMT7ベースで構成したテーマにアップデートしました。

https://github.com/redamoon/mt-theme-starterket

どちらかというとmont-blancに近い構成の初期構築に必要な設定をまとめたものになります。
こちらも参考にしていただければと思います。

最後に

まだまだすべてをまとめきれていないませんが、今後もyamlの指定する情報をまとめていきます。
まずはテーマを作る際の情報として参考になればと思います。

株式会社HAMWORKS
株式会社HAMWORKS

Discussion