Contao 2.10の更新にまつわる失敗

Contao 2.10.3に更新する際に、放っておいて失敗してしまいました。それは...。

カスタマイズしたテンプレートの見直し

単にContao 2.9から更新しただけなら、あまり問題にならないのですが、最近開始した個人のウェブサイトを最初からHTML5で作成したところが問題でした。HTML5そのものには何の罪もありません。

Contaoとテンプレート

Contaoでは最終的なページの表示はバックエンド、フロントエンドいずれもテンプレートのファイルを元に行っています。ContaoのテンプレートはPHPのスクリプトを含められるXHTMLファイルで、内部的にはTemplateクラスによって処理されます。

Contaoを構成するモジュールが保持するテンプレートのファイルをカスタマイズする場合は、オリジナルのテンプレートのファイルのコピーをtemplatesディレクトリに作成して、このディレクトリに同じ名前のファイルがあれば使用するという方法を取っています。

これにより、コアの配布ファイルを変更する必要は一切ないわけで、問題があった場合もカスタマイズしたテンプレートのファイルを削除してしまえば、取り敢えずの問題は解消します。

これらのテンプレートのファイルはContao 2.10より前のバージョンでは .tpl という拡張子を使用していました。

HTML5のサポートとテンプレート

Contao 2.10からXHTMLに加えてHTML5をサポートしています。両方で同じテンプレートを使用するわけにはいかないため、Contao 2.10以降では次のようにしています。

  1. Contaoを構成するモジュールが保持するテンプレートのファイルは、HTML5とXHTMLの両方を用意しています。この場合、テンプレートのファイルの拡張子はそれぞれ .html5.xhtml です。
  2. カスタマイズしたテンプレートのファイルはカスタマイズする元のファイルに従って、 .html5.xhtml のいずれかの拡張子となります。

過去との互換のため、いずれの場合も以前の .tpl という拡張子のファイルしかなければ、それをテンプレートとして使用するようになっています。但し、この場合は中身がどちらであるかまでは検査していません。

今回起きたこと

今回起こしてしまった問題はカスタマイズしたテンプレートの内容のことを忘れていたことにあります。

  1. 少しカスタマイズしたニュースリーダーのフロントエンドモジュール用のテンプレートのファイル(mod_newsreader.tpl)を使用していました。
  2. Contao 2.9.xからContao 2.10.xに更新してテンプレートのファイルの内容も一応は確認して問題なく移行しました。
  3. 新しいウェブサイトをHTML5で作成したところ、ニュースリーダーのフロントエンドモジュール用のテンプレートのファイル(mod_newsreader.tpl)が使用されてしまい、辻褄が合わずページが表示されなくなりました。

解決するには mod_newsreader.tpl のファイルを mod_newsreader.xhtml と名前を変更するか、カスタマイズ用のファイル mod_newsreader.html5 を作成してしまうか、どちらかを行うと良いことになります。

正当な方法としては前者になりますが、Contao 2.9.xから2.10.xに移行した場合にカスタマイズしているテンプレートのファイルの拡張子を .tpl から .xhtml に変更するというのが良い習慣ということになりそうです。