Viewの統合

http://bobchin.ddo.jp/download/maple_view.zip
ここにサンプルをあげておきました。


V3.2の方ではあまり貢献できなさそうなので土曜日にチャットやった後に作ってみました。
イメージとしては、3つのフィルタビュー(Filter_SmartyView(名前変更しました), Filter_SimpleView, Filter_FlexyView)の共通な部分をFilter_ViewBaseに持っていきました。TemplateMethodな感じで、基本ロジックはFilter_ViewBaseが担当します。
Filter_ViewBaseはなるべく細かい単位でメソッド化しているので、新たにビューを作成する場合はメソッドをオーバーライドすることが楽にできるんじゃないかな?と思います。

で、Filter_Viewは中身が代わって、maple.iniでは[View]セクションのみで3つのビューを扱えるようにしました。今まで通りにも使えるはずです。(これのために以前のFilter_Viewは名前を変更しFilter_SmartyViewにしました)
ビューの変更方法は2つです。優先順位順に
1.maple.iniの[View]セクションの"_view"エントリの値
2.定数「DEFAULT_VIEW」の値
3.上記が指定されていない場合は、「Smarty」(以前の互換用)
です。
設定する値は、Smarty|Simple|Flexy (大文字小文字関係なし)です。これはビュー名の「Filter_XXXView」のXXX部分を指定します。


Filter_ViewBase内ですが、テンプレート指定で「(type):(value)」と指定された場合に、動作する内容をメソッドに振り分けるようにしたので、拡張しやすいと思います。
現在では、「location:〜」「action:〜」という種類があると思いますが、これはそれぞれ「doLocation」「doAction」というメソッドを実行しますので、そのメソッドに動作内容を記述すればよいようになっています。
メソッドの引数は2つで、以下の場合

[View]
success = "action:path_to_action"

doActionの第1引数には、値(この場合は"path_to_action")が
第2引数には、キー名(この場合は"success")が渡されます。

function doAction($action, $key)
{
    $action; // path_to_action
    $key;    // success
}


SimpleViewについて、否応なしに h 関数を作ってましたが、関数名がかぶったりする可能性があるのでやめました。
処理の中心は簡易的なテンプレートクラス「SimpleView4Maple」でするようにしました。
このクラス内の h メソッドの内容が以前の h 関数の内容になります。
また、テンプレート内で使用するメソッド名も「setAliasFuncNameメソッド」で変更できます。
定数「ALIAS_FUNC」や[View]セクションの"_alias"エントリで指定できます。
(Filter_SimpleViewの「doActionメソッド」を参考にしてください。)


Flexy_Viewですが、一応Filter_FlextViewに合わせたつもりなんですが、ちょっと自身がないです。すんません・・・