Kohana的视图层很简单,变量数据放在$_data数组中。所以继承Kohana_View类并覆写部分方法,就可以非常轻松的使用第三方模版引擎作为视图层。
这里的例子是使用Blitz Template,如果要用Smarty之类的也可以类似修改。
文件在application/classes/stucampus/system/view.php下,可以修改,但是修改要和命名空间对应。至于如何支持命名空间,见
这里
-
namespace StuCampus\System;
- class View extends \Kohana_View
- {
- /**
- * 模版引擎
- *
- * @var \Blitz
- */
- protected static $templateEngine = null;
-
- /**
- * Returns a new View object. If you do not define the "file" parameter,
- * you must call [View::set_filename].
- *
- * $view = View::factory($file);
- *
- * @param string view filename
- * @param array array of values
- * @return View
- */
- public static function factory($file = NULL, array $data = NULL)
- {
- return new self($file, $data);
- }
-
- /**
- * Captures the output that is generated when a view is included.
- * The view data will be extracted to make local variables. This method
- * is static to prevent object scope resolution.
- *
- * $output = View::capture($file, $data);
- *
- * @param string filename
- * @param array variables
- * @return string
- */
- protected static function capture($kohana_view_filename, array $kohana_view_data)
- {
- // 覆写parent
- $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)
- {
- // 这个方法和parent一样的,但是parent没有使用静态延迟绑定,所以只好重写一次= =#
- if ($file !== NULL)
- {
- $this->set_filename($file);
- }
-
- if (empty($this->_file))
- {
- throw new Kohana_View_Exception('You must set the file to use within your view before rendering');
- }
-
- // Combine local and global data and capture the output
- return View::capture($this->_file, $this->_data);
- }
-
- }
复制代码
|