Estoy desarrollando una app con PHP OOP, MVC, y tengo el siguiente layout.
En todos los ítem del menú se muestra una grilla de datos donde cada fila contiene un elemento que es un enlace que carga el formulario para editar la información de la fila seleccionada, y ademas botones para agregar y eliminar entre otros, bueno lo que yo quiero es que al presionar el enlace para editar, se cargue la vista con el formulario en esa sección del LAYOUT, el mismo comportamiento debe tener la acción agregar, y es en este punto donde necesito de su ayuda, como puedo hacer para cargar el form correspondiente a la acción (editar o agregar), tengo una clase VIEW que es donde debo realizar ese proceso, pero me ocurren las siguientes cosas, para editar me carga el form solo una vez y las siguientes veces se deforma todo el layout, lo hacia con AJAX donde en el acción index cargaba el layout y todo lo demás y luego en la petición ajax para cargar el form no renderiza el layout y no carga nada, espero sus consejos.
VIEW.php
Código:
Saludos <?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; } } ?>