/** * 渲染指定的视图文件 * * 渲染时,视图要使用的数据保存在控件的 $_view 属性中。 * * @param string $filename * @param array $more_vars * * @return string */ protected function _fetchView($filename, array $more_vars = null) { $vars = $this->_view; $vars['_ctx'] = $this->_context; $vars['_CTL_ID'] = $this->id(); $vars['_BASE_DIR'] = $this->_context->baseDir(); $vars['_BASE_URI'] = $this->_context->baseUri(); $vars['_REQUEST_URI'] = $this->_context->requestUri(); if (is_array($more_vars)) { $vars = array_merge($vars, $more_vars); } //if (is_null($this->_render)) //{ $this->_render = new $this->_render_class(dirname($filename)); //} $this->_render->vars($vars); $extname = pathinfo($filename, PATHINFO_EXTENSION); $pextname = $this->_render->extname(); if (empty($extname) || $extname != $pextname && !empty($pextname)) { $filename .= '.' . ($pextname ? $pextname : 'php'); } return $this->_render->parse($filename); }
/** * 渲染指定的视图文件 * * 渲染时,视图要使用的数据保存在控件的 $_view 属性中。 * * @param string $filename * @param array $more_vars * * @return string */ protected function _fetchView($filename, array $more_vars = null) { $vars = $this->_view; /** * TODO! 全局变量应该放到 控件抽象类 _before_render() 中 */ $vars['_ctx'] = $this->_context; $vars['_CTL_ID'] = $this->id(); $vars['_BASE_DIR'] = $this->_context->baseDir(); $vars['_BASE_URI'] = $this->_context->baseUri(); $vars['_REQUEST_URI'] = $this->_context->requestUri(); // if (is_array($more_vars)) { $vars = array_merge($vars, $more_vars); } if (strpos($filename, 'view:') === 0) { $filename = Q::ini('app_config/APP_DIR') . DS . 'view' . DS . ltrim(substr($filename, 5), '/\\'); } elseif ($filename[0] != DS && strpos($filename, ':') === false) { $_class_name = strtolower(get_class($this)); $_sep = explode('_', $_class_name); array_pop($_sep); $filename = Q::ini('app_config/APP_DIR') . DS . implode($_sep, DS) . DS . ltrim($filename, '/\\'); } if (is_null($this->_render)) { $this->_render = new $this->_render_class(dirname($filename)); } else { // TODO! 假如共享视图解析器实例,需在此做必要处理 } $this->_render->assign($vars); $extname = pathinfo($filename, PATHINFO_EXTENSION); $pextname = $this->_render->extname(); if (empty($extname) || $extname != $pextname && !empty($pextname)) { $filename .= '.' . ($pextname ? $pextname : 'php'); } return $this->_render->parse($filename); }