suin.io

XOOPS(Cube)のテンプレートの命名規則

suin2008年4月25日

XOOPSのテンプレートはデータベース・ベースです。なのでブラウザから変更するのが簡単で、もとのファイルには影響を与えないので、バージョンアップの際に衝突を避けることができ、もとても便利です。

ところで、XOOPSのテンプレートの命名規則はまだ改善の余地がありそうです。

blocksだけ下位階層にならなきゃならないのか

この疑問自体はGIJOEさんが「D3モジュールとブロックテンプレート」で提起されたものです。

メインテンプレートと分ける必要がどこにあるのでしょう? (雛形ファイルとしてわざわざ階層を分けておきながら、実際にはフラットなDBテンプレートです)

GIJOEさんの指摘は鋭いものがあります。ブロックテンプレートは、作るとき階層構造を設けておきながら、運用する際には階層のないフラットなDBテンプレートになります。指摘のとおり、ブロックテンプレートとメインテンプレートは接頭辞を使い分けるだけの実装で十分だと考えられます。

メールテンプレートだけ言語ファイルである必要性とは?

先輩方の話によりますと、テンプレートエンジンであるSmartyがXOOPSに実装されたのは、XOOPS2にバージョンアップしたときらしいです。XOOPS1時代の化石と考えられるメールテンプレートは、Smarty化されぬまま言語ファイルとして、今このときもなお生きた化石として生き続けています。

今となっては、メールテンプレートが言語ファイルでなければならない理由はどこにもないはずです。むしろ、Smartyのテンプレートとして運用したほうが、メインテンプレートが受けている恩恵をメールテンプレートも享受することができます。

  • 多言語サイトの場合、複数の言語ファイルを編集する手間が省ける
  • テンプレートマネージャで手軽に編集できる。
  • バージョンアップの際に上書きされずに済む。
  • Smartyの関数など、Smartyの機能を使うことができる。

なぜ拡張子がhtmlなのか?

SmartyはHTMLを出力するテンプレートエンジンとして特化していると思います。そのため、拡張子をhtmlにしたのかもしれません。しかし、Smartyを使って出力するのは必ずしもHTMLとは限りません。たとえば、私の作ったBulletinモジュールではRSS(XML)を出力する際に、Smartyテンプレートを使っています。さらに、モジュールによってはJavaScriptやCSSを出力するのにテンプレートを使っているケースがあります。

これだけでも、拡張子がhtmlでなければならないという仕様はあいまいなものになりますが、さらに突き詰めていけば、htmlという拡張子をつけられたテンプレートファイルは、すでにHTML文書を逸脱した文書になっています。テンプレートファイルをブラウザで開いてみればわかりますが、ブラウザはテンプレートファイルを正しくパースできず、不完全な表示になってしまいます。

わたしの考えでは、テンプレートの拡張子はtplにすべきです。これは、次のようなメリットがあります。

  • HTMLに限らずあらゆるものの(JavaScript, CSS, XML, メール)テンプレートとして使える。
  • Windowsの場合、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

テンプレートにしかるべき命名規則をもって整理し開発すれば、管理が容易になるだけでなく、拡張性も向上するはずです。

RELATED POSTS