Piece_Unity の Flexy レンダラ拡張を考える
あとで書く予定だったブツが、見つかってしまいました。
Piece FrameworkでFlexy派待望の出力オブジェクト切り替えが可能に?
いやあ、Flexy のこと全然分かってないので、こんな使い方できるのもこの前やっと知りました、サーセンwww
とまあ半分冗談の半分本当なお話ですが、「実はこんなことができる」というのが続々登場する隠し技満載な HTML_Template_Flexy について、Piece_Unity のレンダラの拡張を提案中です。
さて、
3. ダミー要素にflexy:dynamic属性を付けておき、HTML_Template_Flexy_Elementのchildrenフィールドを使ってダミー要素の内容を書き換えるか、overrideフィールドを使ってダミー要素そのものを書き換える
これを行うには HTML_Template_Flexy_Element に対しての操作を実施することになるのですが、
1. アクションクラス内にまで HTML_Template_Flexy_Element クラスを持ってこれるようにし、それに対してユーザが任意に操作する (新規拡張案 A)
2. アクションクラス内にまで HTML_Template_Flexy_Element クラスに相当するような Piece_Unity 専用のクラスを持ってこれるようにし、それに対してユーザが任意に操作する (新規拡張案 B)
3. ViewElement に対して「決められたルールに従う」ような特別な値をセットしておくと、Flexy レンダラが HTML_Template_Flexy_Element に対しての操作をしてくれる (既存拡張案)
簡単なのは 3. で、現行のアクションクラス内で行っている Element 操作と同じような
$elements['foo']['_children'] = array('Bar', 'Baz')
$elements['hoge']['_override'] = 'Hige';
$viewElement = &$this->_payload->getViewElement();
$viewElement->setElement('_elements', $elements);
みたいに使えるようになる形なのですが、children には Flexy_Element オブジェクトも指定できるのでそれをどう実現するかという点と、現行のこの仕組みについて ITEMAN と「黒魔術的だねえ」という風に思っている点 (特に最終行の _elements) をどうするかですね。
しかし 1. レベルになると、アクションクラスに特定のレンダリング機構の操作が堂々と登場してしまうのも残念すぎるため避けたいところで、つまるお話、この「特定のレンダリング機構の匂い」をどこまで出してよいかというのを考えてから形にしたいところです。
そういう意味では今回要望に出した出力オブジェクトの切り替えとプラグインの使用についてはこれが見事クリアできていて、
* 「Renderer_Flexy の設定ポイント」による指定
* 利用者が必要に応じてのみ準備する別ファイル形式
という具合になっているため、仮に如何ともし難い理由によりテンプレートエンジンを変更する場合においても一切の影響が出ない(もちろん変更後のテンプレートを別途準備する必要はあります)という形式の拡張となってます。
まあ 3. 案については、children 内の配列内要素をリテラルに限定するならば比較的すぐにでも実装できそうではあります。あとは (使ったことない) prefix, suffix あたりも準備したいところですが、こちらも Flexy_Element である必要があるため難しい……仮に実装したとしても、今のままではさらに黒魔術的な操作になっちゃいそうです。
ちなみに、
Flexyには、Smartyが標準で用意しているカスタム関数 {html_checkboxes} や {html_radios} のような、要素のリストを出力する機能がなく、不便に感じることが多々あります。
YOU, 唯一準備されている Flexy_Plugin の Savant を使っちゃいなよ!
<!-- lists は array('foo', 'bar', 'baz') -->
<span flexy:foreach="lists,k,v">
{this.plugin(#checkbox#,k,v):h}{v}
</span>
{this.plugin(#radios#,#hoge#,lists):h}
続きは、Source で!
今回の要望が通ったら、これからはこういう操作も Piece で使えるようになります。
しかしこういう値の出力系をやるならやっぱり Smarty のほうがよいような気がせんでもないです。
更に、HawkさんのFlexySupportみたいなことができれば…。
「みたいなこと」は FormRenderer ですか?要は Form 値の自動適応。
トラックバック(0)
このブログ記事を参照しているブログ一覧: Piece_Unity の Flexy レンダラ拡張を考える
このブログ記事に対するトラックバックURL: http://hatotech.org/mt-admin/mt-tb.cgi/663

コメントする