/** * 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 a view file and return result * * If $controller is not set, the (localized) view file is searched in $viewPath * and the layout in $layoutFile is applied, if set. * * @param string $view name of view to render * @param array $data view data * @return string rendered content */ private function render($view, $data = array()) { if (($controller = $this->controller) === null) { static $controller; if ($controller === null) { $controller = new CController('pdffile'); } $controller->layout = $this->layout; // Required to make console app play nicely during rendering Yii::app()->attachBehavior('consoleWorkaround', array('class' => 'ConsoleAppWorkaround', '_viewPath' => $this->baseViewPath, '_layoutPath' => $this->layoutPath)); $file = Yii::app()->findLocalizedFile($this->viewPath . '/' . $view . '.php'); if ($file === false) { throw new CException('Could not find view file ' . $view); } ini_set('implicit_flush', false); $content = $controller->renderInternal($file, $data, true); if ($controller->layout === null) { return $content; } return $controller->renderInternal($controller->getLayoutFile($controller->layout), array('content' => $content), true); } else { return $controller->render($view, $data, true); } }
/** * @inheritDoc */ public function getLayoutFile($layoutName) { if (($layoutFile = parent::getLayoutFile($layoutName)) === false) { $layoutFile = $this->getDefaultViewFile($layoutName, 'layouts'); } return $layoutFile; }