2008,01,21, Monday
PHP/PEARライブラリの Flexy というテンプレートエンジンを触って見ました。
Flexyの特徴としては、タグの中に属性値として if処理と foreach処理が指定できるので、WYSIWYGソフトでHTML編集をした際にレイアウトが崩れにくいというのがあげられます。
詳しい内容とインストール手順は、他サイトに任せます。
その際に、いくつか動作がおかしい点を見つけデバッグしました。
バグというよりは、PHP5での動作を考慮していないのだと思います。ファイルの先頭に、「PHP Version 4」と書かれていますし。
---
追記&再編集: 08/02/24
08年1月末に、まさかの新バージョン(v1.31)リリースです!^^
ちょっとびっくりしました。もう保守されないのだとばかり思っていたので。ただ、まだ PHP4 向けのようですが。
---
■ところで、HTML/Template/Flexy/Compiler/Flexy/Tag.php の先頭に、PHP4 では clone()関数を定義する処理が書かれています。
どうせなら HTML/Template/Flexy.php で書けばいいのに。
PHP4でも PHP5でも利用したい人は、このページで書かれている修正について、clone()関数を利用するようにしてください。
■ちなみに、この文章は以下のような場合を想定しています。
checkbox / radio とも id と name の値が違います。
name は [] で配列送信ができるようにし、id は <label>でも利用できるよう独立させています。
<input type="checkbox" id="favorite_apple" name="favorite[]" value="りんご"><label for="favorite_apple">りんご</label>
<input type="checkbox" id="favorite_orange" name="favorite[]" value="オレンジ"><label for="favorite_orange">オレンジ</label>
radioの場合は 配列送信でもそうじゃなくても大丈夫です。
<input type="radio" id="sex_male" name="sex" value="男性"><label for="sex_male">男性</label>
<input type="radio" id="sex_female" name="sex" value="女性"><label for="sex_female">女性</label>
---
(※この修正は、PHP5で利用する場合に限ります。PHP4で利用する分には問題ないはずです)
Flexy全体でそうなんだと思いますが、オブジェクトのコピーの処理が修正されていません。
オブジェクト以外は、 = で右辺から左辺へ「複製」が行われますが、オブジェクトは「参照渡し」が行われます。
複製を行いたい場合は = clone $object としてください。
念のため、オブジェクト以外で「参照渡し」をしたい場合は =& $another です。
上記の変更点は2箇所で、clone と、mergeElement()関数に渡す第2引数を修正しています。
第2引数のほうは、たぶん単純ミスでしょう。修正前でも、エレメントで name属性とid属性の値が同じ場合は問題になりません。
しかし、チェックボックスとラジオチェックでは、id属性とname属性に違う値を設定することが多いので、ここの動作が問題になるはずです。
最初の修正を行わないと radioでの動作がおかしく、修正すると checkboxでの動作がおかしくなります。
個人的には、どうして radioとcheckboxの動作を切り分けする必要があるのかなぁ なんて思います。
コメント
コメントする
この記事のトラックバックURL
http://www.shiftra.jp/shounari/tb.php/66
トラックバック
PAGE TOP ↑