LOGIN ID Password Auto Login Register Now! Lost Password?
XOOPS2BasicManual
About XOOPS
JavaScriptをOnでご覧ください。

5.1 テンプレートシステムの概要

XOOPSテンプレートとは

XOOPSではSmartyテンプレートエンジンを利用しています。テンプレートエンジンに渡す雛形のうち、前章で説明したテーマ以外のものをXOOPSでは特に「テンプレート」と呼びます。 *1

テーマの章でも説明しましたが、XOOPSにおいては、Smartyテンプレートシステムの開始タグと終了タグをカスタマイズしていて、開始タグが<{、終了タグが}>です。 *2

HTMLを出力するテンプレートでは、通常のHTML文書の中に、適宜、テンプレート変数<{$変数名}>や、制御構造<{if}><{else}><{/if}>を含んでいます。

FILEテンプレートとDBテンプレート

テンプレートにはFILEテンプレートとDBテンプレートの2種類があります。

テンプレート概念図
※テンプレートシステム概念図

それぞれ以下のような特徴を持ちます。

DBテンプレート
  • モジュールのtemplates/以下に置かれたファイルから読み出したテンプレートデータをデータベース内に保持する方法
  • 更新タイミングはインストール時とアップデート時
メリット
  • HTTP経由の操作が容易である(=管理画面での操作)
  • フラットな構造であるため、どこからでもアクセスできる
  • 変更すべきテンプレートの位置が一意である
デメリット
  • 管理が判りづらい (ファイル-default-カスタム)
  • 大規模な変更には向かない
  • モジュールアップデートで破壊されることも多い
FILEテンプレート
  • 任意の場所にあるファイルを直接テンプレートとして利用する方法
  • 更新タイミングも任意で、タイムスタンプなどで管理することが多い
メリット
  • ローカル環境などで、ファイルを編集するだけで全体のプレビューが可能
  • 大規模な変更に比較的強い
  • 勝手に破壊されることはない
デメリット
  • ちょっとした変更でもFTP権限が必要
  • 利用時にはパスの深さを想定しなければならない
  • 変更すべきテンプレートの位置に一貫性がない

XOOPSにおいては、テーマがFILEテンプレートです。
また、XOOPSの基本的な機能に基づいて作られたモジュールは、DBテンプレートを利用していますが、xoopsheadlineのように、FILEテ ンプレートと併用しているものや、最初からすべてFILEテンプレートのみ、というモジュールもあり、複雑な状況になっています。

コンパイル済テンプレートキャッシュ

Smartyテンプレートは、独自の文法を持っていますが、このような複雑な文法をその都度解釈していたのでは実行時間がとてもかかるため、Smarty の文法(<{$変数名}>等)をあらかじめプレーンなPHPソース(<?phpで開始、?>で終了)に変換して保存しておく設計 となっています。

この変換処理をコンパイルと呼び、コンパイルによって生成されたファイルがコンパイル済テンプレートキャッシュです。

このキャッシュは、templates_c/ フォルダ内に各テンプレート毎に1つずつ独立したファイルとして作られます。 *3
これらのファイルの中身を見れば判るように、すべてPHPのソースコードです。

再度コンパイルする必要がない限り、サイトを表示する際に利用されるのは、あくまでこのコンパイルキャッシュです。

つまり以下の噂は、ほぼ誤解と言えるでしょう。 *4

  • FILEテンプレートはDBテンプレートより速い
  • Smartyを、SimplateのようなCソースベースのテンプレートシステムに置き換えればサイトの表示速度が向上する
テンプレートセットとは

XOOPSテンプレートシステムは、基本的にDBテンプレートを利用します。DBテンプレートを複数毎束ねたものが、テンプレートセットです。

サイト毎に、どのテンプレートセットを利用するかを、 一般設定→一般設定 にて指定します。

どのサイトにも必ず存在する特別なテンプレートセットが、defaultテンプレートセットです。セット名を変更することも出来ません。この特別なテンプレートセットは、すべてのモジュールのDBテンプレートを持っています。

ユーザが任意に作成可能なのが、カスタムテンプレートセットであり、名前も自由に指定可能です。そして、DBテンプレートセットを何枚持っても構いませ ん。defaultセットと同じく、全DBテンプレートを持つことも可能ですし、DBテンプレートセットを1枚も持たないテンプレートセットも存在可能で す。

DBテンプレートの動作説明

モジュールをインストールすると、それと同時に、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 イメージマネージャーの概念
Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities