/** * Función que carga y construye el componente * @param component Componente que se quiere cargar * @param settins Opciones para el componente * @return Componente cargado * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl) * @version 2015-05-04 */ public function load($component, $settings = array()) { // si ya se cargó solo se retorna if (isset($this->_loaded[$component])) { return $this->_loaded[$component]; } // cargar clase para el componente, si no existe error $componentClass = App::findClass('Controller_Component_' . $component); if (!class_exists($componentClass)) { throw new Exception_Controller_Component_Missing(array('class' => $componentClass)); } // cargar componente $this->_loaded[$component] = new $componentClass($this, $settings); $this->_loaded[$component]->controller =& $this->_Controller; // retornar componente return $this->_loaded[$component]; }
/** * Método que determina (según la extensión) que tipo de renderizado se * necesita hacer y lo ejecuta. * @param $location Ubicación de la vista que se desea renderizar * @param $viewVars Variables que se deben pasar a la vista * @return Buffer de la página renderizada */ public static function render($location, $viewVars = []) { $ext = substr($location, strrpos($location, '.') + 1); $class = App::findClass('View_Helper_Pages_' . ucfirst($ext)); return $class::render($location, $viewVars); }
/** * Método para renderizar una página * El como renderizará dependerá de la extensión de la página encontrada * @param page Ubicación relativa de la página * @param location Ubicación de la vista * @return Buffer de la página renderizada * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl) * @version 2014-12-18 */ public function render($page, $location = null) { // buscar página if ($location) { $location = self::location(\sowerphp\core\App::layer($location) . '/' . $location . '/View/' . $page); } else { $location = self::location($page, $this->request->params['module']); } // si no se encontró error if (!$location) { if ($this->request->params['controller'] == 'pages') { $this->render('/error/404'); } else { throw new Exception_View_Missing(array('view' => $page, 'controller' => Utility_Inflector::camelize($this->request->params['controller']), 'action' => $this->request->params['action'])); } return; } // preparar _header_extra (se hace antes de renderizar la página para // quitarlo de las variables por si existe if (isset($this->viewVars['_header_extra'])) { $_header_extra = ''; if (isset($this->viewVars['_header_extra']['css'])) { foreach ($this->viewVars['_header_extra']['css'] as &$css) { $_header_extra .= ' <link type="text/css" href="' . $this->request->base . $css . '" rel="stylesheet" />' . "\n"; } } if (isset($this->viewVars['_header_extra']['js'])) { foreach ($this->viewVars['_header_extra']['js'] as &$js) { $_header_extra .= ' <script type="text/javascript" src="' . $this->request->base . $js . '"></script>' . "\n"; } } unset($this->viewVars['_header_extra']); } else { $_header_extra = ''; } // dependiendo de la extensión de la página se renderiza $ext = substr($location, strrpos($location, '.') + 1); $class = App::findClass('View_Helper_Pages_' . ucfirst($ext)); $page_content = $class::render($location, $this->viewVars); if ($this->layout === null) { return $page_content; } // buscar archivo del tema que está seleccionado, si no existe // se utilizará el tema por defecto $layout = $this->getLayoutLocation($this->layout); if (!$layout) { $this->layout = $this->defaultLayout; $layout = $this->getLayoutLocation($this->layout); } // página que se está viendo if (!empty($this->request->request)) { $slash = strpos($this->request->request, '/', 1); $page = $slash === false ? $this->request->request : substr($this->request->request, 0, $slash); } else { $page = '/' . Configure::read('homepage'); } // determinar module breadcrumb $module_breadcrumb = []; if ($this->request->params['module']) { $modulos = explode('.', $this->request->params['module']); $url = ''; foreach ($modulos as &$m) { $link = Utility_Inflector::underscore($m); $module_breadcrumb[$link] = $m; $url .= '/' . $link; } $module_breadcrumb += explode('/', substr(str_replace($url, '', $this->request->request), 1)); } // determinar titulo $titulo_pagina = isset($this->viewVars['header_title']) ? $this->viewVars['header_title'] : $this->request->request; // renderizar layout de la página (con su contenido) return View_Helper_Pages_Php::render($layout, array_merge(array('_header_title' => Configure::read('page.header.title') . ($titulo_pagina ? ': ' . $titulo_pagina : ''), '_body_title' => Configure::read('page.body.title'), '_footer' => Configure::read('page.footer'), '_header_extra' => $_header_extra, '_page' => $page, '_nav_website' => Configure::read('nav.website'), '_nav_app' => Configure::read('nav.app'), '_timestamp' => date(Configure::read('time.format'), filemtime($location)), '_layout' => $this->layout, '_content' => $page_content, '_module_breadcrumb' => $module_breadcrumb), $this->viewVars)); }
/** * Método que obtiene el controlador * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl) * @version 2014-03-22 */ private static function _getController(Network_Request $request, Network_Response $response) { // Cargar clase del controlador $class = App::findClass('Controller_' . Utility_Inflector::camelize($request->params['controller']), $request->params['module']); if (!class_exists($class)) { return false; } // Se verifica que la clase no sea abstracta $reflection = new \ReflectionClass($class); if ($reflection->isAbstract()) { return false; } // Se retorna la clase instanciada del controlador con los parámetros // $request y $response al constructor return $reflection->newInstance($request, $response); }