/** * Render the view * * @param string $___viewFn * @param string $___dataForView * @return void */ protected function _render($___viewFn, $___dataForView = array()) { $isCtpFile = substr($___viewFn, -3) === 'ctp'; if (empty($___dataForView)) { $___dataForView = $this->viewVars; } if ($isCtpFile) { $out = parent::_render($___viewFn, $___dataForView); } else { ob_start(); // Setup the helpers from the new Helper Collection $helpers = array(); $loadedHelpers = $this->Helpers->loaded(); foreach ($loadedHelpers as $helper) { $name = Inflector::variable($helper); $helpers[$name] = $this->loadHelper($helper); } $data = array_merge($___dataForView, $helpers); $data['_view'] = $this; $data['config'] = Configure::read(); $relativeFn = str_replace($this->templatePaths, '', $___viewFn); $template = $this->Twig->loadTemplate($relativeFn); echo $template->render($data); $out = ob_get_clean(); } return $out; }
/** * @brief render views * * Let cake render the view as per normal, then pass the data to Mustache * to render the data into any templates * * @access protected * * @param string $viewFile the file that is being rendered * @param array $data see cake docs * * @return string the rendered output */ protected function _render($viewFile, $data = array()) { $this->__loadHelpers(); $out = parent::_render($viewFile, $data); $this->__renderMustache($out); $this->__parseSnips($out); return $out; }
/** * Overrides the View::_render() * Sets variables used in CakePHP to Smarty variables * * @param string $___viewFn * @param string $___data_for_view * @param string $___play_safe * @param string $loadHelpers * @return rendered views */ function _render($___viewFn, $___data_for_view = array()) { // use cake's render for .ctp files. if (preg_match('/\\.ctp$/', $___viewFn)) { return parent::_render($___viewFn, $___data_for_view); } if ($this->helpers != false) { $this->loadHelpers(); $loadedHelpers = $this->helpers; foreach (array_keys($loadedHelpers) as $helper) { $replace = strtolower(substr($helper, 0, 1)); $camelBackedHelper = preg_replace('/\\w/', $replace, $helper, 1); ${$camelBackedHelper} =& $loadedHelpers[$helper]; if (isset(${$camelBackedHelper}->helpers) && is_array(${$camelBackedHelper}->helpers)) { foreach (${$camelBackedHelper}->helpers as $subHelper) { ${$camelBackedHelper}->{$subHelper} =& $loadedHelpers[$subHelper]; } } $this->loaded[$camelBackedHelper] = ${$camelBackedHelper}; switch ($this->smartyMajorVersion) { case 2: $this->Smarty->assign_by_ref($camelBackedHelper, ${$camelBackedHelper}); break; case 3: $this->Smarty->assignByRef($camelBackedHelper, ${$camelBackedHelper}); break; } } } $this->registerFunctions(); if (empty($___data_for_view)) { $___data_for_view = $this->viewVars; } foreach ($___data_for_view as $data => $value) { if (!is_object($data)) { $this->Smarty->assign($data, $value); } } switch ($this->smartyMajorVersion) { case 2: $this->Smarty->assign_by_ref('view', $this); $this->Smarty->assign_by_ref('this', $this); break; case 3: $this->Smarty->assignByRef('view', $this); $this->Smarty->assignByRef('this', $this); break; } $res = $this->Smarty->fetch($___viewFn); return $res; }
/** * Render the view * * @param string $_viewFn * @param string $_dataForView * @return void */ protected function _render($_viewFn, $_dataForView = array()) { $isCtpFile = substr($_viewFn, -3) === 'ctp'; if (empty($_dataForView)) { $_dataForView = $this->viewVars; } if ($isCtpFile) { return parent::_render($_viewFn, $_dataForView); } ob_start(); // Setup the helpers from the new Helper Collection $helpers = array(); $loaded_helpers = $this->Helpers->attached(); foreach ($loaded_helpers as $helper) { $name = Inflector::variable($helper); $helpers[$name] = $this->loadHelper($helper); } if (!isset($_dataForView['cakeDebug'])) { $_dataForView['cakeDebug'] = null; } $data = array_merge($_dataForView, $helpers); $data['_this'] = $this; $relativeFn = str_replace($this->templatePaths, '', $_viewFn); $template = $this->Twig->loadTemplate($relativeFn); echo $template->render($data); return ob_get_clean(); }
protected function _render($___viewFn, $___dataForView = array()) { $isCtpFile = substr($___viewFn, -3) === 'ctp'; if (empty($___dataForView)) { $___dataForView = $this->viewVars; } if ($isCtpFile) { $out = parent::_render($___viewFn, $___dataForView); } else { extract($___dataForView, EXTR_SKIP); foreach ($___dataForView as $data => $value) { if (!is_object($data)) { $this->Smarty->assign($data, $value); } } $this->Smarty->assign('_view', $this); $out = $this->Smarty->fetch($___viewFn); } return $out; }
/** * Renders a layout. Returns output from _render(). Returns false on error. * * @param string $content_for_layout Content to render in a view, wrapped by the surrounding layout. * @return mixed Rendered output, or false on error */ function renderLayout($content_for_layout, $layout = null) { $layoutFileName = $this->_getLayoutFileName($layout); if (empty($layoutFileName)) { return $this->output; } $debug = ''; if (isset($this->viewVars['cakeDebug']) && Configure::read() > 2) { $params = array('controller' => $this->viewVars['cakeDebug']); $debug = View::element('dump', $params, false); unset($this->viewVars['cakeDebug']); } if ($this->pageTitle !== false) { $pageTitle = $this->pageTitle; } else { $pageTitle = Inflector::humanize($this->viewPath); } $data_for_layout = array_merge($this->viewVars, array('title_for_layout' => $pageTitle, 'content_for_layout' => $content_for_layout, 'scripts_for_layout' => join("\n\t", $this->__scripts), 'cakeDebug' => $debug)); if (empty($this->loaded) && !empty($this->helpers)) { $loadHelpers = true; } else { $loadHelpers = false; $data_for_layout = array_merge($data_for_layout, $this->loaded); } $this->_triggerHelpers('beforeLayout', 'beforeSmartyLayout'); if (substr($layoutFileName, -3) === 'ctp' || substr($layoutFileName, -5) === 'thtml') { $this->output = View::_render($layoutFileName, $data_for_layout, $loadHelpers, true); } else { $this->output = $this->_render($layoutFileName, $data_for_layout, $loadHelpers, true); } if ($this->output === false) { $this->output = $this->_render($layoutFileName, $data_for_layout); $msg = __("Error in layout %s, got: <blockquote>%s</blockquote>", true); trigger_error(sprintf($msg, $layoutFileName, $this->output), E_USER_ERROR); return false; } $this->_triggerHelpers('afterLayout', 'afterSmartyLayout'); return $this->output; }
/** * Renders a layout. Returns output from _render(). Returns false on error. * * @param string $contentForLayout Content to render in a view, wrapped by the surrounding layout. * @return mixed Rendered output, or false on error * @access public */ function renderLayout($contentForLayout) { $layoutFilename = $this->_getLayoutFileName(); if (Configure::read() > 2 && $this->controller != null) { $debug = View::_render(LIBS . 'view' . DS . 'templates' . DS . 'elements' . DS . 'dump.thtml', array('controller' => $this->controller), false); } else { $debug = ''; } if ($this->pageTitle !== false) { $pageTitle = $this->pageTitle; } else { $pageTitle = Inflector::humanize($this->viewPath); } $dataForLayout = array_merge($this->viewVars, array('title_for_layout' => $pageTitle, 'content_for_layout' => $contentForLayout, 'cakeDebug' => $debug)); if (is_file($layoutFilename)) { if (empty($this->loaded) && !empty($this->helpers)) { $loadHelpers = true; } else { $loadHelpers = false; $dataForLayout = array_merge($dataForLayout, $this->loaded); } if (substr($layoutFilename, -5) === 'thtml') { $out = View::_render($layoutFilename, $dataForLayout, $loadHelpers, true); } else { $out = $this->_render($layoutFilename, $dataForLayout, $loadHelpers); } if ($out === false) { $out = $this->_render($layoutFilename, $dataForLayout); trigger_error(sprintf("Error in layout %s, got: <blockquote>%s</blockquote>", $layoutFilename, $out), E_USER_ERROR); return false; } else { return $out; } } else { return $this->cakeError('missingLayout', array(array('layout' => $this->layout, 'file' => $layoutFilename, 'base' => $this->base))); } }
/** * render method * * Wrap the file contents in a comment with the filename (debug mode, and not the layout, only) * * @param mixed $___viewFn * @param mixed $___dataForView * @param bool $loadHelpers true * @param bool $cached false * @return void * @access protected */ function _render($___viewFn, $___dataForView, $loadHelpers = true, $cached = false) { $return = parent::_render($___viewFn, $___dataForView, $loadHelpers, $cached); if (!empty($return[0]) && $return[0] === '<' && Configure::read() && !strpos($___viewFn, 'layout')) { $return = "\n" . '<!-- ' . $___viewFn . ' START -->' . "\n" . $return . "\n" . '<!-- ' . $___viewFn . ' END -->' . "\n"; } return $return; }
/** * Renders a layout. Returns output from _render(). Returns false on error. * Several variables are created for use in layout. * title_for_layout - contains page title * content_for_layout - contains rendered view file * scripts_for_layout - contains scripts added to header * cakeDebug - if debug is on, cake debug information is added. * * @param string $content_for_layout Content to render in a view, wrapped by the surrounding layout. * @return mixed Rendered output, or false on error */ function renderLayout($content_for_layout, $layout = null) { $layoutFileName = $this->_getLayoutFileName($layout); $debug = ''; if (isset($this->viewVars['cakeDebug']) && Configure::read() > 2) { $debug = View::element('dump', array('controller' => $this->viewVars['cakeDebug']), false); unset($this->viewVars['cakeDebug']); } if ($this->pageTitle !== false) { $pageTitle = $this->pageTitle; } else { $pageTitle = Inflector::humanize($this->viewPath); } $data_for_layout = array_merge($this->viewVars, array('title_for_layout' => $pageTitle, 'content_for_layout' => $content_for_layout, 'scripts_for_layout' => join("\n\t", $this->__scripts), 'cakeDebug' => $debug)); if (empty($this->loaded) && !empty($this->helpers)) { $loadHelpers = true; } else { $loadHelpers = false; $data_for_layout = array_merge($data_for_layout, $this->loaded); } if (!empty($this->loaded)) { $helpers = array_keys($this->loaded); foreach ($helpers as $helperName) { $helper =& $this->loaded[$helperName]; if (is_object($helper)) { if (is_subclass_of($helper, 'Helper') || is_subclass_of($helper, 'helper')) { $helper->beforeLayout(); } } } } if (substr($layoutFileName, -3) === 'ctp' || substr($layoutFileName, -5) === 'thtml') { $this->output = View::_render($layoutFileName, $data_for_layout, $loadHelpers, true); } else { $this->output = $this->_render($layoutFileName, $data_for_layout, $loadHelpers); } if ($this->output === false) { $this->output = $this->_render($layoutFileName, $data_for_layout); trigger_error(sprintf(__("Error in layout %s, got: <blockquote>%s</blockquote>", true), $layoutFileName, $this->output), E_USER_ERROR); return false; } if (!empty($this->loaded)) { $helpers = array_keys($this->loaded); foreach ($helpers as $helperName) { $helper =& $this->loaded[$helperName]; if (is_object($helper)) { if (is_subclass_of($helper, 'Helper') || is_subclass_of($helper, 'helper')) { $helper->afterLayout(); } } } } return $this->output; }
/** * Renders and returns output for given view filename with its * array of data. * * @param string Filename of the view * @param array Data to include in rendered view * @return string Rendered output * @access protected */ function _render($___viewFn, $___dataForView, $loadHelpers = true, $cached = false) { if (substr($___viewFn, strrpos($___viewFn, '.')) == $this->ext) { $cachedViewFile = $this->_getCachedViewFileName($___viewFn); if(!$this->cache||@filemtime($___viewFn)>@filemtime($cachedViewFile)) { if (empty($this->haml)) $this->_init(); file_put_contents($cachedViewFile, $data = $this->haml->parse($___viewFn)); @chmod($cachedViewFile, $this->filePermission); } return parent::_render($cachedViewFile, $___dataForView, $loadHelpers, $cached); } else { return parent::_render($___viewFn, $___dataForView, $loadHelpers, $cached); } }