Saludos. Mi duda es la siguiente:
Estoy utilizando Symfony y Twig para plantillas. Tengo la plantilla layout que es la base, de la cual extiende las plantilla de la cabecera, sidebar y las que muestran el contenido.
Mi duda es cómo puedo actualizar (con ajax) el área del contenido sin actualizar el sidebar y la cabecera.
Gracias.
Respuestas
No acabo de entender bien la pregunta, ya que no importa la tecnología que uses en el servidor (Symfony y Twig en este caso). Si quieres actualizar parte de la página mediante Ajax, sólo tienes que hacer peticiones Ajax y cambiar el contenido de los elementos HTML específicos dentro de la página.
Lo único que puedes tener en cuenta en el servidor es el método $request->isXmlHttpRequest()
que permite saber si una petición es "normal" o realizada mediante Ajax, por si quieres cambiar el comportamiento en cada caso.
@javiereguiluz
En sidebar se encuentra el menu navegación. Y solo se actualice la plantilla donde se carga el contenido.
@dariongg
Te aconsejo que crees varias plantillas con los diferentes contenidos que desees mostrar con cada peticion Ajax. Esas plantillas tendrán dentro variables, luego puedes hacer que tus menus del sidebar ejecuten llamadas Ajax a un controlador que se va a encargar de obtener las variables necesarias para cada plantilla. Una vez que el controlador ejecute $this->render()
esto generara el HTML necesario para añadirlo al bloque de contenido que has definido. Ejemplo:
$.post(Routing.generate('mostrar_contenido_pagina', { id: 1 }), {'nombre': nombre}, function (respuesta, textStatus, jqXHR) { $('#contenido').html(respuesta); });
/** * @Route("/mostrar_contenido_pagina/{id}", name = "mostrar_contenido_pagina") * */ public function mostrar_contenido_paginaAction() { /* tu logica*/ $this->render('@APBundle/Pagina/plantilla_pagina.html.twig', array( 'datos'= $datos )); }
Si te fijas en la llamada Ajax: $('#contenido').html(respuesta);
, el elemento contenido
será un <div>
que tendrá ese id
y se le adicionará el HTML que devuelta el render
del controlador en cada caso.
Espero que te sirva.
@RoberRielo