テンプレート
2007年12月26日
member.phpのログイン部分は完成。こちらの方は、Nucleus SHA encryption edition で経験済みだったので、それほど時間はかからず。特筆する点はそれほど無い(Nucleusとほとんど代わらない)が、一つの特徴は、メンバーログイン用のデータベースは、他のものから独立していること。これはセキュリティーを考えてのことで、仮にどこかでSQLインジェクションがあっても、パスワードやメールアドレスなどが洩れないようになっている。
また、skin.phpを少し改良し、parse_ifメソッドの中で呼び出しメソッド名の解決を行っていたのを、コンパイル時に解決しておくようにした。
次にテンプレート周りを完成させれば、あとはNucleusのスキン変数・テンプレート変数処理部分を次々と移植していくだけ。で、ここ2-3日、テンプレートの仕様を考えている。
最初にどんな特徴を持たせるかを考えたとき、テンプレートを廃止して、スキンを多層化しようと思っていたのだが、これが大間違いなアイデアであることが判明した。そもそも、スキンとテンプレートは全く別のもので、テンプレートの概念をスキンに入れ込んでしまうことなど不可能だった。それに、Nucleusのスキンは、parsedinclude などの機能で、すでに多層化が実現している。
テンプレート部分をいかにコンパイルしようかと考えていて、これに気が付いた。
Nucleus の構造としては、まずスキンありき。ここから、Nucleusのさまざまな機能(スキン変数)が呼び出される。それらの機能の中で使われているのが、テンプレート。この『まずスキンありき』というスキンの性質から、これをコンパイルすることが可能だったわけ。一方で、テンプレートのほうはスキン変数から呼び出されるわけだから、テンプレートのコンパイルをスキンのコンパイルと同じように行おうとすると、スキン変数の機能の部分までコンパイルしないといけないということである。これは無理。
なので、やはりNucleusの元の姿に戻って、スキン・テンプレートの両方を持たせることにした。『まずスキンありき』という性質から、スキンはデータベースに入れずに、ファイル直書きでよいだろう。一方でテンプレートの方は、データベースに入れたほうがすっきりしそうだ。Nucleusのテンプレート編集画面は非常に使いづらいのであるが、これは後で考えることにして、テンプレート部分の基本機能はNucleusとほぼ同じで行くことにする。
ただし、テンプレートのパース部分は、スキンのパース部分のコードをそのまま用い、いかなるテンプレートについても、プラグインからdoTemplateVarのように呼び出すことが出来るようにする予定。
テンプレートのコンパイルは、TEMPLATE_FOO_FOOFOOなどの定数にコンパイル済みのものを入れるようにし、これらの定数が定義されている場合はそのまま用い、定義されていない場合はコンパイルされた値で定数を定義するようにする。この方法だと、コンパイルされたindex.phpではTEMPLATE_FOO_FOOFOO定数値としてコンパイル済みテンプレートを埋め込めばよい。
それにしても、最初にスキン→テンプレートの仕組みを考えた人は、偉いね。
また、skin.phpを少し改良し、parse_ifメソッドの中で呼び出しメソッド名の解決を行っていたのを、コンパイル時に解決しておくようにした。
次にテンプレート周りを完成させれば、あとはNucleusのスキン変数・テンプレート変数処理部分を次々と移植していくだけ。で、ここ2-3日、テンプレートの仕様を考えている。
最初にどんな特徴を持たせるかを考えたとき、テンプレートを廃止して、スキンを多層化しようと思っていたのだが、これが大間違いなアイデアであることが判明した。そもそも、スキンとテンプレートは全く別のもので、テンプレートの概念をスキンに入れ込んでしまうことなど不可能だった。それに、Nucleusのスキンは、parsedinclude などの機能で、すでに多層化が実現している。
テンプレート部分をいかにコンパイルしようかと考えていて、これに気が付いた。
Nucleus の構造としては、まずスキンありき。ここから、Nucleusのさまざまな機能(スキン変数)が呼び出される。それらの機能の中で使われているのが、テンプレート。この『まずスキンありき』というスキンの性質から、これをコンパイルすることが可能だったわけ。一方で、テンプレートのほうはスキン変数から呼び出されるわけだから、テンプレートのコンパイルをスキンのコンパイルと同じように行おうとすると、スキン変数の機能の部分までコンパイルしないといけないということである。これは無理。
なので、やはりNucleusの元の姿に戻って、スキン・テンプレートの両方を持たせることにした。『まずスキンありき』という性質から、スキンはデータベースに入れずに、ファイル直書きでよいだろう。一方でテンプレートの方は、データベースに入れたほうがすっきりしそうだ。Nucleusのテンプレート編集画面は非常に使いづらいのであるが、これは後で考えることにして、テンプレート部分の基本機能はNucleusとほぼ同じで行くことにする。
ただし、テンプレートのパース部分は、スキンのパース部分のコードをそのまま用い、いかなるテンプレートについても、プラグインからdoTemplateVarのように呼び出すことが出来るようにする予定。
テンプレートのコンパイルは、TEMPLATE_FOO_FOOFOOなどの定数にコンパイル済みのものを入れるようにし、これらの定数が定義されている場合はそのまま用い、定義されていない場合はコンパイルされた値で定数を定義するようにする。この方法だと、コンパイルされたindex.phpではTEMPLATE_FOO_FOOFOO定数値としてコンパイル済みテンプレートを埋め込めばよい。
それにしても、最初にスキン→テンプレートの仕組みを考えた人は、偉いね。