CompositeView

Maple Wikiにご要望をいただいていたので、ちょっと試作してみた。

http://kunit.jp/archives/composite.zip

試すには 3.1.0 の環境に圧縮ファイルを上書きということになります。ただし、Filter_Actionを上書きすることになるので、実験環境をつくってから試してください。htdocs/においてある composite.php を実行していただければサンプルがみれます。

CompositeViewの試作は意外と簡単にできてしまって、Filter_Actionをいじっただけなのだが・・・コアを読まれている方はFilter_Actionの変更点をみるとちょっとびっくりするかもしれない。ちょっと極悪なつくりではあるが、ある意味MapleっぽいといえばMapleっぽいかも。(逃がすコンポーネントがConfigUtils/FilterChain/ActionChain/Responseだけでいいのか?とかツッコミをいただけるとありがたい)

えっと、どういう風に使える拡張かと言うと、maple.iniのActionセクションに「slot:Action名」と記述するとそのActionを実行して、その出力結果をActionのパラメータにインジェクションすることができるというものである。Mojavi3の同様な機能よりは簡単につかえていいんじゃないかと思うんですがどうでしょう?

[Action]
slot1 = "slot:example_header"
slot2 = "slot:example_menu"
slot3 = "slot:example_body1"

[SimpleView]
success = "example/base.html"
class Example
{
    var $slot1; // この例だと example_header というActionの実行結果が入る
    var $slot2; // この例だと example_menu というActionの実行結果が入る
    var $slot3; // この例だと example_body1 というActionの実行結果が入る

    function execute()
    {
        return 'success';
    }
}
<html>
<body>
<?= $action->slot1 ?>
<?= $action->slot2 ?>
<?= $action->slot3 ?>
</body>
</html>

とりあえず、思いついたのを勢いで作ってみたので、ご意見いただければと思います。これを練りこんでいって、次のバージョンではCompositeView対応ができればいいなと思っています。