LOGIN ID Password Auto Login Register Now! Lost Password?
XUGJ Wiki

XCLBasicManual

Page Top

XOOPSテンプレートとは anchor.png

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

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

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

Page Top

FILEテンプレートとDBテンプレート anchor.png

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

5_1fig01.gif
*テンプレート概念図

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

Page Top

DBテンプレート anchor.png

モジュールのtemplates/以下に置かれたファイルから読み出したテンプレートデータをデータベース内に保持する方法。 更新タイミングはインストール時とアップデート時

Page Top
メリット anchor.png
  • HTTP経由の操作が容易である(=管理画面での操作)
  • フラットな構造であるため、どこからでもアクセスできる
  • 変更すべきテンプレートの位置が一意である
Page Top
デメリット anchor.png
  • 管理が判りづらい (ファイル-default-カスタム)
  • 大規模な変更には向かない
  • モジュールアップデートで破壊されることも多い
Page Top

FILEテンプレート anchor.png

任意の場所にあるファイルを直接テンプレートとして利用する方法。 更新タイミングも任意で、タイムスタンプなどで管理することが多い

Page Top
メリット anchor.png
  • ローカル環境などで、ファイルを編集するだけで全体のプレビューが可能
  • 大規模な変更に比較的強い
  • 勝手に破壊されることはない
Page Top
デメリット anchor.png
  • ちょっとした変更でもFTP権限が必要
  • 利用時にはパスの深さを想定しなければならない
  • 変更すべきテンプレートの位置に一貫性がない
Page Top

XCLにおける使い分け anchor.png

XCL2.1の基本的な仕様(すなわちLegacy_RenderSystem)においては、テーマがFILEテンプレートです。

ただし、管理画面テーマなど管理画面関連のテンプレートは、Legacy_AdminRenderSystemが処理していて、すべてがFILEテンプレート(パスによるオーバーライドシステム)となっています。

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

Page Top

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

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

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

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

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

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

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

テンプレートセットとは anchor.png

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

サイト毎に、どのテンプレートセットを利用するかを、 互換モジュールの全般設定にて指定します。

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

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

Page Top

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

モジュールをインストールすると、それと同時に、xoops_version.phpに記載された通りに、モジュール内のtemplates/フォルダ内から各テンプレートファイルがデータベース(tplfileおよびtplsourceテーブル)に読み込まれます。*5

モジュールアップデート時には、そのモジュールが利用しているテンプレートがいったんすべて削除され、インストール時と同じように、 xoops_version.phpに記載された通りに、モジュール内のtemplates/フォルダ内から各テンプレートファイルがデータベースに再度読み込まれます。

モジュールアンインストール時に、そのモジュールが利用しているテンプレートがDB内から全て削除されます。

モジュールやブロックの最終表示処理を行う際(通常はfooter.phpでの処理)に、テンプレートが呼び出されると、以下のような処理順序となります。

1) コンパイルキャッシュを探す

2) (コンパイルキャッシュがなければ)「利用するテンプレートセット」内から該当テンプレートを読み出し、コンパイルする(1へ)

3) (利用するテンプレートセット内に該当テンプレートがなければ)defaultテンプレートセット内から該当テンプレートを読み出し、コンパイルする(1へ)

4) いずれにもテンプレートがなければ、エラーを吐く


*1 もちろん、Smartyを経由して出力している以上、テーマもSmartyにとっての「テンプレート」ではあります
*2 デフォルトのSmartyでは、{ と }
*3 だからこのフォルダを書込許可する必要があるのです
*4 なんらかの理由で、コンパイルを高頻度で行うサイトであれば話は別です
*5 D3モジュールでは、モジュールインストール時のコールバック関数が独自にテンプレート名を変更しつつ登録します

トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 6763, today: 1, yesterday: 0
初版日時: 2008-06-12 (木) 17:57:43
最終更新: 2014-01-13 (月) 22:06:02 (JST) (1312d) by fabi
Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities