/** * Render full HTML page. A controller/action that uses XPage to render page * can render its view in Yii's standard way or render a constructed page with a * main view and multiple sidebars of left and right of the main content. * * @param bool $return * * @return mixed|string */ public function render($return = false) { $this->registerAssets(); /** * re-implement the render() of CController but not firing events * for beforeRender and afterRender as they are not really useful */ $this->renderColumn('left'); $this->renderColumn('main'); $this->renderColumn('right'); $content = ''; foreach ($this->views['main'] as $renderedInfo) { $content .= "\n" . $renderedInfo['content']; } $this->views['content'] = $content; if (($layoutFile = $this->controller->getLayoutFile($this->controller->layout)) !== false) { $output = $this->controller->renderFile($layoutFile, $this->views, true); } else { $leftContent = ''; foreach ($this->views['left'] as $renderedInfo) { $leftContent = "\n" . $renderedInfo['content']; } $rightContent = ''; foreach ($this->views['right'] as $renderedInfo) { $rightContent = "\n" . $renderedInfo['content']; } $output = $leftContent . "\n" . $content . "\n" . $rightContent; } $output = $this->controller->processOutput($output); if ($return) { return $output; } else { echo $output; } }
/** * Render the view file * @param string $viewName Name of the view * @param array $viewData Data for extraction * @return string The rendered result * @throws CException */ public function renderView($viewName, $viewData = null) { //resolve the file name if (($viewFile = $this->getViewFile($viewName)) !== false) { //use controller instance if available or create dummy controller for console applications if (isset(Yii::app()->controller)) { $controller = Yii::app()->controller; } else { $controller = new CController(__CLASS__); } //render and return the result return $controller->renderFile($viewFile, $viewData, true); } else { //file name does not exist throw new CException('View "' . $viewName . '" does not exist!'); } }