生意気にもMVCもどきを考えているので、Viewの仕組みを考える必要がある。
Viewのしくみ
やりたいこと。
- phpでテンプレートファイルを作る。
- テンプレートファイルを読み込む
- 読み込んだテンプレートに、選択言語に応じて定型文を埋め込む。
- テンプレートの変数に、必要な情報を埋め込む。
- ブラウザの画面に出力する。
いろんな考え方はあると思うけれど、今回私が選択したのは以下の通り。
- routerの役割をするものがないので、phpファイルに直接アクセスさせる。
- ob_startで出力バッファを稼働。require_once()してテンプレートファイルを読み込み、ob_get_contenst()で変数に代入する。
- 代入した内容を加工する(未検討)
- 加工した内容を画面に表示(echo)する。
file()を使ってファイルから配列に読み込もうとしたところ、htmlタグが削除されてしまった。 DOMDocument::loadHTMLfileからのsaveHTMLもやってみたが、今度はテンプレートファイルのPHPが稼働しないため、テンプレートパーツを読み込んでくれない。
むむむ。というわけで、今回は上記出力バッファを使った方法で進めてみる。
この仕事を実装しようとすると、言語仕様が固まらないとテンプレートの仕様に影響するとわかったので、言語周りのDAOを先にコーディングすることにした。
言語仕様
こちらはgetTr()というメソッドを定義してやって、ファイルの要所で言語tableを読み出し、挿入していくという方法を考えている。
databaseへのアクセスが繰り返されると負担になりそうな気もするので、なんか一回で終わらせる方法を考えてみたいが……難しいかな。
テンプレートファイルをrequire_once()する前に、テンプレートファイル側でDaoを呼んで言語テキストは埋めてしまうことにする。読み込んでから加工するの難しそう。サーバーの負荷は大きめかしら……。
で、言語テキスト込みのテンプレートを読み込んでおいてから、データを埋め込んで出力する、と。そう考えるとview一つでもけっこうあれこれ処理があるなぁ。