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