![]() |
![]() |
XOOPSではSmartyテンプレートエンジンを利用しています。テンプレートエンジンに渡す雛形のうち、前章で説明したテーマ以外のものをXOOPSでは特に「テンプレート」と呼びます。 *1
テーマの章でも説明しましたが、XOOPSにおいては、Smartyテンプレートシステムの開始タグと終了タグをカスタマイズしていて、開始タグが<{、終了タグが}>です。 *2
HTMLを出力するテンプレートでは、通常のHTML文書の中に、適宜、テンプレート変数<{$変数名}>や、制御構造<{if}><{else}><{/if}>を含んでいます。
テンプレートにはFILEテンプレートとDBテンプレートの2種類があります。

※テンプレートシステム概念図
それぞれ以下のような特徴を持ちます。
| DBテンプレート | |
|---|---|
|
|
| メリット |
|
| デメリット |
|
| FILEテンプレート | |
|---|---|
|
|
| メリット |
|
| デメリット |
|
XOOPSにおいては、テーマがFILEテンプレートです。
また、XOOPSの基本的な機能に基づいて作られたモジュールは、DBテンプレートを利用していますが、xoopsheadlineのように、FILEテ ンプレートと併用しているものや、最初からすべてFILEテンプレートのみ、というモジュールもあり、複雑な状況になっています。
Smartyテンプレートは、独自の文法を持っていますが、このような複雑な文法をその都度解釈していたのでは実行時間がとてもかかるため、Smarty の文法(<{$変数名}>等)をあらかじめプレーンなPHPソース(<?phpで開始、?>で終了)に変換して保存しておく設計 となっています。
この変換処理をコンパイルと呼び、コンパイルによって生成されたファイルがコンパイル済テンプレートキャッシュです。
このキャッシュは、templates_c/ フォルダ内に各テンプレート毎に1つずつ独立したファイルとして作られます。 *3
これらのファイルの中身を見れば判るように、すべてPHPのソースコードです。
再度コンパイルする必要がない限り、サイトを表示する際に利用されるのは、あくまでこのコンパイルキャッシュです。
つまり以下の噂は、ほぼ誤解と言えるでしょう。 *4
XOOPSテンプレートシステムは、基本的にDBテンプレートを利用します。DBテンプレートを複数毎束ねたものが、テンプレートセットです。
サイト毎に、どのテンプレートセットを利用するかを、 一般設定→一般設定 にて指定します。
どのサイトにも必ず存在する特別なテンプレートセットが、defaultテンプレートセットです。セット名を変更することも出来ません。この特別なテンプレートセットは、すべてのモジュールのDBテンプレートを持っています。
ユーザが任意に作成可能なのが、カスタムテンプレートセットであり、名前も自由に指定可能です。そして、DBテンプレートセットを何枚持っても構いませ ん。defaultセットと同じく、全DBテンプレートを持つことも可能ですし、DBテンプレートセットを1枚も持たないテンプレートセットも存在可能で す。
モジュールをインストールすると、それと同時に、xoops_version.phpに記載された通りに、モジュール内のtemplates/フォルダ内から各テンプレートファイルがデータベース(tplfileおよびtplsourceテーブル)に読み込まれます。
モジュールアップデート時には、そのモジュールが利用しているテンプレートがいったんすべて削除され、インストール時と同じように、 xoops_version.phpに記載された通りに、モジュール内のtemplates/フォルダ内から各テンプレートファイルがデータベースに再度 読み込まれます。
モジュールアンインストール時に、そのモジュールが利用しているテンプレートがDB内から全て削除されます。
モジュールやブロックの最終表示処理を行う際(通常はfooter.phpでの処理)に、テンプレートが呼び出されると、以下のような処理順序となります。
1. コンパイルキャッシュを探す
2. (コンパイルキャッシュがなければ)「利用するテンプレートセット」内から該当テンプレートを読み出し、コンパイルする(1へ)
3. (利用するテンプレートセット内に該当テンプレートがなければ)defaultテンプレートセット内から該当テンプレートを読み出し、コンパイルする(1へ)
4. いずれにもテンプレートがなければ、エラーを吐く
![]()
*1 もちろん、Smartyを経由して出力している以上、テーマもSmartyにとっての「テンプレート」ではあります
*2 デフォルトのSmartyでは、{ と }
*3 だからこのフォルダを書込許可する必要があるのです
*4 なんらかの理由で、コンパイルを高頻度で行うサイトであれば話は別です
|
Previous
5.2 テンプレートセットの複製 |
Top of contents |
Next
6.6 イメージマネージャーの概念 |