Kohana のビュー レイヤーは非常にシンプルで、変数データが $_data 配列に配置されます。したがって、Kohana_View クラスを継承し、一部のメソッドをオーバーライドすることで、サードパーティのテンプレート エンジンをビュー レイヤーとして簡単に使用できます。
ここではBlitz Templateを使用した例を示していますが、Smartyなどを使用したい場合も同様に変更できます。
ファイルは application/classes/stucampus/system/view.php にあり、変更できますが、変更は名前空間に対応している必要があります。名前空間をサポートする方法については、を参照してください。
ここ
- namespace StuCampusSystem;
- class View extends Kohana_View
- {
- /**
- * テンプレート エンジン
- *
- * @var Blitz
- */
- protected static $templateEngine = null;
- /**
- * 新しい View オブジェクトを返します。 "file" パラメータを定義しない場合は、
- * [View::set_filename] を呼び出す必要があります。
- *
- * $view = View::factory($file);
- *
- * @param string view filename
- * @param array 値の配列
- * @return View
- */
- public static function Factory($file = NULL, array $data = NULL)
- {
- return new self($file, $data);
- }
- /**
- * ビューが含まれるときに生成される出力をキャプチャします。
- * ビューのデータはローカル変数を作成するために抽出されます。このメソッド
- * はオブジェクト スコープの解決を防ぐために静的です。
- *
- * $output = View::capture($file, $data);
- *
- * @param string filename
- * @param array variables
- * @return string
- */
- protected static function capture($kohana_view_filename, array $ kohana_view_data)
- {
- // 親をオーバーライドします
- $params = array_merge($kohana_view_data, self::$_global_data);
- $output = self::$templateEngine->parse($params);
- return $output;
- }
-
- /**
- * ビューのファイル名を設定します
- *
- * @example $view->set_filename($file);
- *
- * @param string view filename
- * @return View
- * @throws Kohana_View_Exception
- */
- public function set_filename($file)
- {
- $return =parent::set_filename($file);
-
- // ビューエンジンを初期化します
- self::$templateEngine = new Blitz ($this->_file);
-
- return $return;
- }
-
- /**
- * テンプレートを解析します
- *
- * @see Kohana_View::render()
- */
- public function render($file = NULL)
- {
- // このメソッドは親と同じです、ただし、親は静的遅延バインディングを使用していないため、一度書き直す必要があります = =#
- if ($file !== NULL)
- {
- $this->set_filename($file);
- }
-
- if ( empty($this ->_file))
- {
- throw new Kohana_View_Exception('レンダリング前にビュー内で使用するファイルを設定する必要があります');
- }
-
- // ローカル データとグローバル データを結合して出力をキャプチャします
- return View::capture ($this->_file, $this->_data);
- }
-
- }
コードをコピー
|