テンプレートセットの登録
テンプレートセットをプラグインで追加することができます。追加されたテンプレートセットは、新規ブログ作成時に選択することができるようになります。作成されたブログでテンプレートの初期化を行う場合、テンプレートは、ブログ作成時に選択したテンプレートセットに初期化されます。
テンプレートセットを 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
実際にプラグインとして動作するもののサンプルも参照ください。