
Bshe_Viewでは、Viewクラスに値や配列をセットして、テンプレートへ値や属性を反映するほかに、キー属性に対して、独自のリソースクラスを定義することができます。
簡単なWebページの開発では利用することは少ないと思いますが、同じ機能を複数のWebページに展開する場合や、キャッシュを複雑にコントロールしたい場合にこの機能は有用だと思います。
ただ、この実装がいろいろと考えていたら難解になってしまいました。
この部分は、今のままの実装のほかに、別の方法も取れるような機能拡張を現在検討中ですが、
現在の実装ではほとんどのことができるようになっていると思います。
Bshe_Viewでは、HTML上のキー属性から、実際にそのタグに対して処理を実施するリソースクラスやメソッドを判別し処理を実行します。
キー属性のルールから「処理クラス名」「処理メソッド名」が抽出されますが、
この「処理クラス名」「処理メソッド名」は実際のクラス名ではなく、その一部になります。
まず、リソースクラス判別については、以下の4つの項目が設定可能です
取り出されたクラス名は以下の順序で判別され、処理する実際のクラスを決定します。
具体的に例を示します。
この場合、クラスとメソッドは次のように決められます。
上で、記載しましたが、キー属性から判別された、メソッド名は実際のクラスのメソッド名ではなく、その一部になります。
取り出されたメソッド名の頭に「assignValues」か「noChacheAssignValues」のいずれかをつけることで、Bshe_Viewから呼び出されるメソッドとなります。
また、これらのメソッドは「static public」で実装しなくてはなりません。
ここで、「assignValues」と「noChacheAssignValues」の違いは、読んだままですが
ここでのキャッシュとは、コンパイルキャッシュとキャッシュで説明されている2つのキャッシュのうち、
後者の通常のキャッシュの方になります。
つまり、前項の例で説明すると、「bshe::myclass:method」というキー属性に対する処理を、
MyClass_MyclassクラスのassignValuesMymethodというメソッドに実装した場合、この実装内で処理されたものは、キャッシュ設定が有効な場合キャッシュされます。
逆にnoChacheAssignValuesMymethodというメソッドに実装した場合は、キャッシュ設定を有効にしてもキャッシュされず都度実行されるようになります。
上記のほかに、各リソースクラスへ「beforeAssign」「afterAssign」メソッドを定義することができます。
これらのメソッドは、「assignValues」や「noChacheAssignValues」が呼ばれる前に「beforeAssign」がよばれ、後で「afterAssign」が呼ばれるようになっています。
各デフォルトのリソースクラスでは処理後にキー属性がHTMLに残らないように削除する後処理がここに実装されています。
リソースクラスはすべてBshe_View_Resource_Html_Abstractクラスを継承して実装する必要があります。
これは、次の項以降で説明する、いくつかのHTMLへのデータ登録関数を利用するためと、
キー属性を処理後に削除するafterAssignメソッドが実装されているためです。
また、assignValues、noChacheAssignValuesのいずれのメソッドも同じ引数、返値で作成する必要があります。
それぞれ、以下のとおりです。
array( 'templateClass' => Bshe_Viewのテンプレートクラス(DOMクラスを内包している)本体 'element' => 処理対象element(タグ)のtemplateClass上での一意名ID 'params' => キー属性をパースした配列 'presetValues' => プログラム上でBshe_Viewへセットした値の配列 )
array( 'originalId' => キー属性の文字列, 'className' => 処理を実施するクラス名(通常は自身の名称が入っています), 'methodName' => 処理を実施するメソッド名(assignValues/noChacheAssignValuesを含まないメソッド名), 'helperName' => ヘルパーが指定されている場合そのクラス名, 'helperParams' => キー属性からヘルパーの引数がパースできた場合その配列, 'arrayMethodParams' => キー属性からメソッドの引数がパースできた場合その値の配列, 'seq' => 同じキー属性文字列が複数ある場合、現在処理を行っているものの番号(0から順次カウントアップ) )
$view->a = 10; $view->a = 20;
array( 0 => 10, 1 => 20 )
HTMLタグへの属性や値のセットは、そのタグによっても処理挙動が異なるようなケースも多いため、リソースクラスから呼び出せるいくつかの機能があらかじめ用意されています。
これらはいずれもリソースクラス内から以下のような形式で呼び出すことができます。
$templateClass = self::assign($templateClass, $arrayData);
指示できる機能は以下のとおりです。
array(
'method' => 'a', // 値のセットであることを表す文字
'element' => 対象のテンプレート上での一意名ID(リソースメソッドの引数から取得)
'params' =>
array(
0 => 対象の属性(innerHTMLの場合は'innerHTML')
1 => セットする値
2 => Helperクラス名(省略可能:省略時はなにもせずそのまま出力)
3 => Helper引数配列(省略可能)
)
)array( 'method' => 'd', // 属性削除を表す文字 'element' => 対象のテンプレート上での一意名ID(リソースメソッドの引数から取得) 'params' => 削除する属性名 )
array( 'method' => 'r', // タグ削除を表す文字 'element' => 対象のテンプレート上での一意名ID(リソースメソッドの引数から取得) )
| Page Info | |
|---|---|
| Page Name : | Bshe/manual/Bshe_View/doc/Programmer/Original/Resource |
| Page aliases : | None |
| Page owner : | abe |
| Can Read | |
| Groups : | All visitors |
| Users : | All visitors |
| Can Edit | |
| Groups : | No one |
| Users : | No one |