テーマの構造
本ページでは、Movable Type 5 のテーマ機能についての技術的な情報を説明します。
テーマ(Theme)とは?
themes ディレクトリ
ユーザが作成あるいは入手したテーマを利用するにはテーマをthemesディレクトリに配置する必要が有ります。
themes ディレクトリは、Movable Typeをインストールしたアプリケーションディレクトリに存在します。また、環境変数の "ThemesDirectory" で指定することもできます。
ThemesDirectory themes
初期値は "themes" [ MT_HOME/themes/ ] です。themes ディレクトリは、以下の設定が必要です。
- mt.cgiの実行ユーザー(apacheやwww-data、suexec環境下ではmt.cgiのオーナーなど)が読み出し、書き込み、一覧できる。
また、以下の設定が推奨されます。
- Webサーバによって 公開されていない。
テーマの配置
themes ディレクトリには、plugins ディレクトリと同様に、各テーマを個別のディレクトリとする、複数のテーマを配置できます。各テーマのディレクトリには、theme.yaml ファイルと必要なファイルが配置されています。代表的な、themes ディレクトリ は以下のような構成になります。
(MT_HOME)/ themes/ MyFirstTheme/ theme.yaml thumbnail.png thumbnail_medium.png thumbnail_small.png alt_tmpl/ static/ blog_templates/ blog_static/
プラグインとの違い
プラグインとテーマには、大きく二つの違いがあります。
Perlコードの禁止
theme.yaml を含むテーマのyamlファイルには、Perlコードとみなされる値を書くことができません。例えば、"sub { "で始まる文字列や、$PluginFoo::PluginFoo::method 形式のメソッド呼び出しなどです。
これは、テーマを利用するユーザーのセキュリティを確保するためであり、将来的にテーマの自動取得などを実現するためにも必要な処置と考えています。
ロードタイミング
プラグインはMTのインスタンス起動毎にすべてのプラグインがロードされますが、テーマは必要な時にロードされます。ユーザーがテーマの一覧画面を開いたときには、すべてのテーマがロードされます。ブログの操作で、テーマの情報が必要な場合は、対象のテーマのみがロードされます。
ウェブサイトとブログのテーマ
テーマは、ブログに適用できるブログテーマと、ウェブサイトに適用できるウェブサイトテーマがあります。また、ブログとウェブサイトの両方に適用できるテーマを作成する事もできます。
レジストリ に追加するテーマ情報
レジストリ に追加する情報は、テーマの"基本情報"と、"テーマ エレメント"と呼ばれる拡張情報に分けることができます。
テーマ エレメント
テーマ エレメントは、テーマに拡張性を持たせるための仕組みです。プラグインと、テーマを連携させることができます。テーマ作者は、必要な テーマ エレメントをいくつでもテーマに含めることができます。
各テーマ エレメント には以下のレジストリキーを指定します。
- importer
このテーマ エレメントの、インポータの識別IDです。省略できません。指定されていないと、テーマのロード時にエラーが発生し、利用できなくなります。
- component
このテーマ エレメントの、インポータおよびエクスポータを提供しているコンポーネントの名前です。省略可能です。エクスポータによって自動的に設定される場合もあります。
- scheme_version
このテーマ エレメントの、スキーマバージョンです。整数あるいは小数で記述します。省略すると、自動的に"1.0"とみなされます。Movable Typeの管理画面でテーマをエクスポートした場合には、エクスポータが自動で適切なバージョン番号を設定します。
- minimum_importer_version
このテーマ エレメントをインポートするために、必要なインポータのバージョンを指定します。省略可能です。省略すると、"0"とみなされます。
- require
このテーマ エレメントが、テーマを利用するのに必須かどうかを指定します。省略可能です。省略すると、"0"とみなされます。
- data
このテーマ エレメントの内容です。data以下に記述する内容は、そのテーマ エレメントのインポータの実装に依存します。Movable Typeの標準のテーマエレメントについては以下を参照してください。
テーマ エレメントをプラグインが処理する場合は、プラグインのインポータの実装に依存します。プラグインでのテーマ エレメント の拡張については、以下を参照してください。
ファイル
テーマのデザインで利用する画像ファイルなどを、(THEME_HOME)/staticディレクトリに含めることができます。このディレクトリがテーマに含まれていると、Movable Typeは自動的にこのディレクトリの内容を(SUPPORT_DIRECTORY)/theme_static/MY_THEME ディレクトリにコピーします。
alt-tmpl ディレクトリ
テーマに、alt-tmpl ディレクトリを含めると、そのテーマを利用中のブログの管理画面をカスタマイズすることができます。Movable Typeが管理画面を表示するときに、最優先のテンプレートとして利用します。これにより、テーマごとに異なる管理画面を提供できます。
プラグイン経由でのテーマの追加
themesディレクトリ以下にインストールされたテーマ以外にも、プラグイン経由でテーマを追加する事も可能です。レジストリの"themes" キー以下にテーマの定義を行ってください。