Movable Type CMSプラットフォーム Movable Type
ドキュメントサイト

Movable Type 4 ManualMovable Type 4 マニュアル

テンプレートセットの登録

最終更新日: 2017.10.06

テンプレートセットをプラグインで追加することができます。追加されたテンプレートセットは、新規ブログ作成時に選択することができるようになります。作成されたブログでテンプレートの初期化を行う場合、テンプレートは、ブログ作成時に選択したテンプレートセットに初期化されます。

テンプレートセットを API を通して登録する場合、設定できる項目は以下です。

  • テンプレートセットの表示名
  • 各テンプレートの名前
  • アーカイブテンプレートが対応するアーカイブタイプ
  • アーカイブテンプレートのアーカイブマッピング
  • インデックステンプレートの出力ファイル名

以下は、テンプレートセットを登録する為のコードの抜粋です。完全なものは、このドキュメントの最後に用意しているサンプルを参照ください。

sub init_registry {
    my $plugin = shift;
    $plugin->registry({
        template_sets => {
            my_set => {
                label => "My Template Set",
                base_path => 'templates',
                order => 100,
                templates => {
                     # templates specified here
                },
            },
        },
    });
};

テンプレートセット登録のプラグインは Perl だけではなく、Yaml ファイルでも作成できます。さきほどの Perl でのサンプルを Yaml で書くと以下のようになります。

template_sets:
   my_set:
     label: My Template Set
     base_path: templates
     order: 100
     templates:
       # templates specified here

テンプレートセット・オプション

テンプレートセットを登録する際は、以下のオプションを提供する必要があります。

  • label - テンプレートセットの表示名
  • base_path - テンプレートセットのテンプレートファイルを格納しているディレクトリへのパス
  • order - テンプレートセットを選択するプルダウンメニューでの表示順序 (数値が大きいほど後)
  • templates - セットに含まれる、テンプレートのリスト

テンプレートセットのベース・パスとテンプレートファイル

base_path オプションは、テンプレートセットが利用するテンプレートの内容が書かれたファイルがどこにあるのかを示します。テンプレートの内容が書かれたファイルは、このオプションで設定した場所に1テンプレートに対して1つのファイルで置かれている必要があります。ファイルの拡張子は .mtml とし、ファイル名は各々のテンプレートを特定するキーになります。

このドキュメントでは、説明を交えながら、以下のテンプレートを持つテンプレートセットを登録するサンプルコードを作成します。

  • plugins/MyPlugin/templates/homepage.mtml
  • plugins/MyPlugin/templates/entry.mtml
  • plugins/MyPlugin/templates/another_entry.mtml
  • plugins/MyPlugin/templates/entry_listing.mtml
  • plugins/MyPlugin/templates/search_results.mtml
  • plugins/MyPlugin/templates/foo.mtml

テンプレート・オプション

テンプレートセットを登録する際は、登録するテンプレートセットに含まれているテンプレートのリストを指定する必要があります。指定するテンプレートのリストはテンプレートの種類ごとに分類され、各々に属するテンプレートの詳細設定を行います。

テンプレートの種類

  • index - インデックステンプレート
  • individual - 個別アーカイブテンプレート (ブログ記事・ウェブページ)
  • archive - アーカイブテンプレート
  • system - システムテンプレート
  • module - テンプレートモジュール
  • widget - ウィジェット

インデックステンプレート・オプション

  • label - テンプレートの表示名
  • outfile - テンプレートが出力するファイル名
  • rebuild_me - インデックステンプレートを再構築するとき、このテンプレートも再構築するオプションをオンにしたい場合は 1 を。オフの場合は 0

以下のコードはインデックステンプレート・オプションのフォーマットです。

Perl
テンプレートの種類 => {
    '.mtml を除くテンプレートファイル名' => {
        label => 'テンプレートの表示名',
        outfile => '出力ファイル名',
        rebuild_me => '再構築オプション',
    },
},
YAML
テンプレートの種類:
  .mtml を除くテンプレートファイル名:
  label: テンプレートの表示名
  outfile: 出力ファイル名
  rebuild_me: 再構築オプション

アーカイブテンプレート・オプション

  • label - テンプレートの表示名
  • mappings - テンプレートの出力に関するマッピング

テンプレートマッピング・オプション

  • archive_type - アーカイブの種類
  • file_template - ファイルの出力先パスを アーカイブファイル名の定義リファレンス を参考に入力
  • preferred - 複数のテンプレートで同じアーカイブタイプを設定している場合、優先するテンプレートに 1 と設定

archive_type オプションで設定可能なアーカイブタイプは以下です。アーカイブの種類により設定できるアーカイブタイプは異なります。

  • Individual (ブログ記事)
  • Page (ウェブページ)
  • Daily (日別)
  • Weekly (週別)
  • Monthly (月別)
  • Yearly (年別)
  • Author (ユーザー別)
  • Author-Daily (ユーザー - 日別)
  • Author-Weekly (ユーザー - 週別)
  • Author-Monthly (ユーザー - 月別)
  • Author-Yearly (ユーザー - 年別)
  • Category (カテゴリ)
  • Category-Daily (カテゴリ - 日別)
  • Category-Weekly (カテゴリ - 週別)
  • Category-Monthly (カテゴリ - 月別)
  • Category-Yearly (カテゴリ - 年別)

以下のコードはアーカイブテンプレート・オプションのフォーマットサンプルです。

Perl
テンプレートの種類 => {
    '.mtml を除くテンプレートファイル名' => {
        label => 'テンプレートの表示名',
        mappings => {
        マッピングを識別する名前 => {
            archive_type => 'アーカイブの種類',
            file_template => 'ファイルの出力先パス・ファイル名',
        },
    },
},
YAML
テンプレートの種類:
  .mtml を除くテンプレートファイル名:
    label: テンプレートの表示名
    mappings:
      マッピングを認識する名前:
        archive_type: アーカイブの種類
        file_template: ファイルび出力先パス・ファイル名

システムテンプレート・オプション

  • label - テンプレートの表示名
  • description_label - テンプレートの説明

以下のコードはシステムテンプレート・オプションのフォーマットです。

Perl
テンプレートの種類 => {
    '.mtml を除くテンプレートファイル名' => {
        label => 'テンプレートの表示名',
        description_label => 'テンプレートの説明',
    },
},
YAML
テンプレートの種類:
  .mtml を除くテンプレートファイル名:
    label: テンプレートの表示名
    description_label: テンプレートの説明

モジュールテンプレート, ウィジェット・オプション

  • label - テンプレートの表示名

以下のコードはモジュールテンプレート, ウィジェット・オプションのフォーマットです。

Perl
テンプレートの種類 => {
    '.mtml を除くテンプレートファイル名' => {
        label => 'テンプレートの表示名',
    },
},
YAML
テンプレートの種類:
  .mtml を除くテンプレートファイル名:
    label: テンプレートの表示名

ウィジェットセット・オプション

  • order - 登録するウィジェットセットに含まれるウィジェットを、ウィジェットセットより先に登録するために Movable Type がテンプレートセットを読み込む順序を設定
  • label - ウィジェットセットの表示名
  • widgets - 登録するウィジェットセットに含むウィジェットの表示名を、リストのハッシュで記述
Perl
'widgetset' => {
    'ウィジェットセットの登録名' => {
        order => 1000,
        label => 'ウィジェットセットの表示名',
        widgets => [
            'ウィジェットの登録表示名',
            'ウィジェットの登録表示名',
        ],
    },
},
YAML
widgetset:
  ウィジェットセットの登録名:
  order: 1000
  label: ウィジェットセットの表示名
  widgets:
    - ウィジェットの登録表示名
    - ウィジェットの登録表示名
    - ウィジェットの登録表示名

プラグインのサンプル

sub init_registry {
    my $plugin = shift;
    $plugin->registry({
        template_sets => {
            my_set => {
                label => "My Template Set",
                base_path => 'templates/',
                order => 100,
                templates => {
                    index => {
                        'homepage' => {
                            label => 'My Homepage',
                            outfile => 'index.php',
                            rebuild_me => '1',
                        },
                    },
                    individual => {
                        'entry' => {
                            label => 'Blog Entry',
                            mappings => {
                                entry_archive => {
                                    archive_type => 'Individual',
                                    preferred => '0',
                                },
                            },
                        },
                    },
                    archive => {
                        'another_entry' => {
                            label => 'Another Blog Entry',
                            mappings => {
                                entry_archive => {
                                    archive_type => 'Individual',
                                    file_template => '%c/%f',
                                    preferred => '1',
                                },
                            },
                        },
                        'entry_listing' => {
                            label => 'Blog Entry Listing',
                            mappings => {
                                monthly => {
                                    archive_type => 'Monthly',
                                },
                                category => {
                                    archive_type => 'Category',
                                    file_template => '%c/index.html',
                                },
                            },
                        },
                    },
                    system => {
                        'search_results' => {
                            label => 'Search Results',
                            description_label => '',
                        },
                    },
                    module => {
                        'foo' => {
                            label => 'Foo Module',
                        'about_this_page' => {
                            label => 'About This Page',
                        'syndication' => {
                            label => 'Syndication',
                        'powered_by' => {
                            label => 'Powered By',
                        },
                    },
                    widgetset => {
                        'sample_sidebar' => {
                            order => 1000,
                            label => 'Sample - Sidebar',
                            widgets => [
                                'About This Page',
                                'Syndication',
                                'Powered By',
                            ],
                        },
                    },
                },
            },
        },
    });
}

以下のコードはYAML で作成したプラグインのサンプルです。

template_sets:
  my_set:
    label: My Template Set
    base_path: templates
    order: 100
    templates:
      index:
        homepage:
          label: My Homepage
          outfile: index.php
          rebuild_me: 1
      individual:
        entry:
          label: Blog Entry
          mappings:
            entry_archive:
              archive_type: Individual
              preferred: 0
      archive:
        another_entry:
          label: Another Blog Entry
          mappings:
            entry_archive:
              archive_type: Individual
              file_template: %c/%f
              preferred: 1
        entry_listing:
          label: Blog Entry Listing
          mappings:
            monthly:
              archive_type: Monthly
            category:
              archive_type: Category
              file_template: %c/index.html
      system:
        search_results:
          label: Search Results
      module:
        foo:
          label: Foo Module
      widget:
        about_this_page:
          label: About This Page
        syndication:
          label: Syndication
        powered_by:
          label: Poered by
      widgetset:
        sample_sidebar:
          order: 1000
          label: Sample - Sidebar
          widgets:
            - About This Page
            - Syndication
            - Powered By

実際にプラグインとして動作するもののサンプルも参照ください。