複数のテンプレートで同じウィジェットを共有して利用しているとき、サーバーサイドインクルード ( SSI ) を利用して、一つの出力結果を共有して読み込むことで、再構築の負荷を減らせます。
サーバーサイドインクルードで読み込む内容は、どのテンプレートでのも同じ内容のものでなければなりません。モジュール内で条件分岐などを行い読み込む内容を変えるようにしていたとしても、最初に再構築された内容で読み込まれます。
サーバサイドインクルードは、これまでと同じようにテンプレートで MTInclude ファンクションタグでテンプレートモジュール、もしくはウィジェットを読み込むように記述すれば、再構築時に適切なサーバーサイドインクルードの記述に変換して読み込みます。
<$MTInclude widget="最近のスペース記事"$>
例えばサーバーサイドインクルードを行う方法を PHP とした場合、次のような PHP コードに書きかえてテンプレートを処理します (出力結果ではありません)。
<?php include("/path/to/website/blog/includes_c/ssi.php"); ?>
PowerCMS は自動的にファイル出力や置き換えなどの処理を行いますので、テンプレート上ではこれまでと同じように MTInclude ファンクションタグで、テンプレートモジュールや、ウィジェットの名前を指定して読み込むだけでかまいません。(ファイルの拡張子は SSI を行う方法に合わせて変更する必要があります)
PowerCMS では、SSI の各形式に合わせてテンプレートタグ MTInclude の出力結果を変更しますが、ウェブサーバー側で該当の形式の SSI が利用できる設定を行う必要があります。
サポートされる SSI 形式
SSI はウェブサーバーで特別なコマンドを実行して行います。PowerCMS では次の形式の SSI をサポートしています。サーバーで利用可能な形式を選択してください。
- PHPのインクルード
- ApacheのSSI
- ASPのインクルード
- JSPのインクルード
サーバーサイドインクルードを使用する
テンプレートモジュール、ウィジェットでサーバーサイドインクルードを使用するには、まず、モジュールオプションの設定を行います。モジュールオプションの設定は、ワークスペース/スペースメニューの [設定] - [全般] を選択します。全般設定のページ内に [モジュール設定] という項目があるので、[サーバーサイドインクルード] セレクトメニューから、サーバーサイドインクルードを行う方法を選択します。
これで、各テンプレートモジュール、ウィジェットの編集画面の [テンプレートの設定] の中に、サーバーサイドインクルードに関する設定項目が追加されます。
DynamicMTML を利用している場合、[ApacheのSSI] だと意図通り動作しないことがあります。その場合は [PHPのインクルード] を選択してください。
出力ファイルの拡張子を変更する
選択した SSI の形式に合わせて、出力ファイルの拡張子を変更します。例えば [ApacheのSSI] を選択したなら拡張子を shtml に、[PHPのインクルード] を選択したなら、拡張子を php に変更します。
インデックステンプレートで出力するファイルの拡張子変更は、各テンプレートの編集画面 [テンプレートの設定] にある [出力ファイル名] の項目で行います。
アーカイブテンプレートで出力するページの拡張子変更は、ワークスペース/スペースメニューの [設定] - [全般] を選択し、[アーカイブ設定] にある、[ファイルの拡張子] の内容を変更します (. ドットは入力しなくてかまいません)。
テンプレートごとの設定
テンプレートモジュール、ウィジェットごとに、サーバーサイドインクルードを行うか設定できます。各テンプレートの編集画面にある [テンプレートの設定] をクリックし、メニューを展開すると、スペースの公開設定で選択した方法で、サーバーサイドインクルードを行うかどうかを設定する、チェックボックスを確認できます。編集画面を表示中のテンプレートを、サーバーサイドインクルードで読み込ませたいときは、チェックボックスをチェックします。
テンプレート単位ではなく、読み込み先で個別に設定したいときは、MTInclude ブロックタグに ssi
モディファイアを付与します。
ssi="1 | 0"
-
値に 1 を設定すると、読み込むテンプレートモジュール、ウィジェットを SSI を利用して構築します。SSI を利用した構築を行わない場合は、値に 0 を設定します。初期値は 0 です。
注意点
検索用 CGI 用のシステムテンプレートなどでは、PHPをはじめとするスクリプトによるサーバサイドインクルードは動作しません。多くのサーバー環境で、セキュリティ面から実行を禁止しているためです。
- 次は
- 一覧へ