XOOPSのテンプレートはデータベース・ベースです。なのでブラウザから変更するのが簡単で、もとのファイルには影響を与えないので、バージョンアップの際に衝突を避けることができ、もとても便利です。
ところで、XOOPSのテンプレートの命名規則はまだ改善の余地がありそうです。
この疑問自体はGIJOEさんが「D3モジュールとブロックテンプレート」で提起されたものです。
メインテンプレートと分ける必要がどこにあるのでしょう? (雛形ファイルとしてわざわざ階層を分けておきながら、実際にはフラットなDBテンプレートです)
GIJOEさんの指摘は鋭いものがあります。ブロックテンプレートは、作るとき階層構造を設けておきながら、運用する際には階層のないフラットなDBテンプレートになります。指摘のとおり、ブロックテンプレートとメインテンプレートは接頭辞を使い分けるだけの実装で十分だと考えられます。
先輩方の話によりますと、テンプレートエンジンであるSmartyがXOOPSに実装されたのは、XOOPS2にバージョンアップしたときらしいです。XOOPS1時代の化石と考えられるメールテンプレートは、Smarty化されぬまま言語ファイルとして、今このときもなお生きた化石として生き続けています。
今となっては、メールテンプレートが言語ファイルでなければならない理由はどこにもないはずです。むしろ、Smartyのテンプレートとして運用したほうが、メインテンプレートが受けている恩恵をメールテンプレートも享受することができます。
SmartyはHTMLを出力するテンプレートエンジンとして特化していると思います。そのため、拡張子をhtmlにしたのかもしれません。しかし、Smartyを使って出力するのは必ずしもHTMLとは限りません。たとえば、私の作ったBulletinモジュールではRSS(XML)を出力する際に、Smartyテンプレートを使っています。さらに、モジュールによってはJavaScriptやCSSを出力するのにテンプレートを使っているケースがあります。
これだけでも、拡張子がhtmlでなければならないという仕様はあいまいなものになりますが、さらに突き詰めていけば、htmlという拡張子をつけられたテンプレートファイルは、すでにHTML文書を逸脱した文書になっています。テンプレートファイルをブラウザで開いてみればわかりますが、ブラウザはテンプレートファイルを正しくパースできず、不完全な表示になってしまいます。
わたしの考えでは、テンプレートの拡張子はtplにすべきです。これは、次のようなメリットがあります。
テンプレートファイルの拡張子をtplにするというのは、われながら悪い主張ではないと思います。しかし、これには思わぬ問題点があります。
まず、XOOPSがtemplatesディレクトリにあるファイルでも、html拡張子(記憶が正しければcss形式も)しか認識しない問題があります。この仕様はtpl拡張子を利用する上でさまざまな障害をもたらします。
次に、html拡張子を前提として動いていたエディタが使えなくなってしまう問題があります。テンプレートはデザイナーが手を加えることがあります。なので、デザイナーが使ってるエディタがtpl拡張子に対応していない可能性があります。
以上のことを踏まえて、モジュールを作るときには次のような命名規則を適用したいと思います。
{モジュール名}_{用途名}_{ブロック名}.htmlを基本とし、拡張子はしばらくhtmlにする。
用途名は、管理テンプレートがadmin、ブロックテンプレートがblock、メインテンプレートmain、メールテンプレートがmailになります。拡張子をtplで運用するのは現時点では難しいので、妥協してhtmlを採用します。
news_admin_index.html
news_block_recent.html
news_main_article.html
news_mail_notify.html
テンプレートにしかるべき命名規則をもって整理し開発すれば、管理が容易になるだけでなく、拡張性も向上するはずです。
トラバURL : http://suin.asia/trackback/5
氷川 XOOPS Module 開発室