Quisiera saber si me pueden ayudar con algo
Estoy dando mis primeros pasos utilizando patrones de diseño y OOP en php
y tengo una clase VIEW donde cree métodos para cargar cada
parte de la pagina en un contenedor llamado layout que también tiene su metodo
cada sección de la pagina importa lo siguiente el header, menu, footer
y contenido pero esta ultima sección la tengo dividida en 2 partes una de ellas
contendrá la grilla y la otra un formulario que se utilizara para las acciones
de agregar o actualizar utilizando ajax para pasar argumentos que definirán entre
otras cosas que form se carga, el problema viene cuando se debe cargar el form
para actualizar o agregar ya que me carga parte del layout que ya estaba cargado
les dejo el código para que vean que se puede mejorar y si lo estoy haciendo bien o mal
view.php
Código:
controlador: click en un item del menu<?php class View { private $template; private $layout; private $_menu = NULL; private $_stats = NULL; private $_header = NULL; private $_grid = NULL; private $_footer = NULL; private $_form = NULL; private $flash; protected $container = null; public $_displayForm = false; function __construct() { $this->flash = new Flash(); $this->vars = new stdClass(); } public function assign($varname , $varvalue) { $this->vars->$varname = $varvalue; } public function get($varname) { if (isset($this->view->$varname)) return $this->vars->$varname; else return NULL; } public function setLayout( $layout ){ if ( !file_exists( $layout ) ){ $this->flash->error($layout. ' no es un archivo existente'); } $this->layout = $layout; } public function displayHeader( $header ) { ob_start(); if (!file_exists($header)) { $this->flash->error($header. 'no es un archivo existente'); } require $header; $this->_header = ob_get_clean(); //return $_header; } public function displayMenu( $menu ) { ob_start(); if (!file_exists($menu)) { $this->flash->error($menu. 'no es un archivo existente'); } require $menu; $this->_menu = ob_get_clean(); //return $_menu; } public function displayStats( $statsPage ) { ob_start(); if (!file_exists($statsPage)) { $this->flash->error($statsPage. 'no es un archivo existente'); } require $statsPage; $this->_stats = ob_get_clean(); // return $_statsPage; } public function displayFooter( $footer ) { ob_start(); if (!file_exists($footer)) { $this->flash->error($footer. 'no es un archivo existente'); } require $footer; $this->_footer = ob_get_clean(); // return $_footer; } public function displayGrid( $grid ) { ob_start(); if (!file_exists($grid)) { $this->flash->error($grid. 'no es un archivo existente'); } require $grid; $this->_grid = ob_get_clean(); // return $_grid; } public function displayForm( $form ) { if ( $this->_displayForm ) { ob_start(); if (!file_exists($form)) { $this->flash->error($form. 'no es un archivo existente'); } require $form; $this->_form = ob_get_clean(); // return $_form; } return null; } public function setTemplate( $template ){ if ( !file_exists( $template ) ){ $this->flash->error($template. ' no es un archivo existente'); } $this->template = $template; } public function render(){ if ($this->template) $this->content = $this->renderTemplate(); include( $this->layout ); //aqui tengo el problema } public function renderTemplate(){ ob_start(); // @extract( $this->data, EXT_OVERWRITE ); // @extract( $this->errorData, EXT_OVERWRITE ); include ( $this->template ); $content = ob_get_clean(); return $content; } } ?>
Código:
controlador:codigo que va en la accion actualizar por ejemplo$this->_model->findAll(); $this->view->elements = $this->_model->getResponse('moviles'); $this->view->title = Registry::get('APP_NAME'); $this->view->displayHeader('../application/views/header.php'); $this->view->displayMenu('../application/views/menu.php'); $this->view->displayGrid('../application/views/moviles/view_moviles.php'); $this->view->displayFooter('../application/views/footer.php'); $this->view->setLayout('../application/views/layout.php'); $this->view->render();
Código:
Espero puedan ayudarme.$this->view->_displayForm = true; $this->view->displayForm('../application/views/moviles/view_actions_moviles.php'); // $this->view->setLayout('../application/views/layout.php'); $this->view->render();
Saludos