Ver Mensaje Individual
  #3 (permalink)  
Antiguo 10/09/2014, 21:36
nelson_nnn
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Refactorizar sitio en symfony con ajax?

Aquí dejo el controlador que envía los datos a la plantilla "portada" aunque probé tambien enviarlos a la plantilla de "lista_avisos" extendiendo luego a "portada" mediante el metodo load() de js. pero las variables globales del template no toman los los valores enviados desde el controlador (creo que los envía pero solo a la capa que renderiza y no al total.

Código PHP:
Ver original
  1. public function avisosPorLocalidadAction($localidad,$rubro){
  2.  
  3.         $em = $this->getDoctrine()->getManager();
  4.         $loc = $em->getRepository("AvisosOpcionesBundle:Localidades")->findOneBySlug($localidad);
  5.         $rub = $em->getRepository("AvisosOpcionesBundle:Rubros")->findOneBySlug($rubro);
  6.        
  7.         //busco en repositorio avisos por filtro localidad y rubro
  8.          if($localidad && $rubro){
  9.             if($loc && $rub)
  10.                 $avisos = $em->getRepository("AvisosAvisosBundle:Avisos")->findByLocalidad($local,$rub);
  11.             else
  12.                 throw $this->createNotFoundException('Opss!! la página no está disponible por el momento.');
  13.          }
  14.          //busco avisos solo por filtro localidad
  15.          if($local && !$rub){
  16.             if($local)
  17.                 $avisos = $em->getRepository("AvisosAvisosBundle:Avisos")->findByLocalidad($local,null);
  18.             else
  19.                 throw $this->createNotFoundException('Opss!! la página no está disponible por el momento.');
  20.          }
  21.          
  22.          $paginator = $this->get('knp_paginator');
  23.          $pagination = $paginator->paginate($avisos, $this->get('request')->query->get('page',1),20);
  24.        
  25.          return $this->render('AvisosAvisosBundle:Default:portada.html.twig', array('pagination' => $pagination,
  26.                                                                                           'localidad' => $local,
  27.                                                                                           'rubro' => $rub));
  28.     }

Aquí esta el template donde se mostraría un menu lateral y el espacio de los avisos a renderizar con ajax.

Código Twig:
Ver original
  1. {# template portada #}
  2. {% extends  '::base.html.twig' %}
  3.  
  4. {#  variables globales que deberían capturar datos del controlador para pasar a la barra lateral y mostrar como informacion de filtros en recuadro #}
  5. {% set localidad = app.request.get('localidad') %}
  6. {% set rubro = app.request.get('rubro') %}
  7.  
  8.  
  9. {% block stylesheets %}
  10.     {{parent()}}
  11. {% endblock %}
  12.  
  13. {% block title %}Avisos | Portada{% endblock %}
  14.  
  15. {% block id 'portada' %}
  16.  
  17. {% block aside %}
  18. {# Aquí iría el lateral con un menú de opciones de rubros y otro de localidades ademas de un recuadro para mostrar los filtros seleccionados #}
  19.       {% include ':includes:aside.html.twig' %}
  20. {% endblock %}
  21.  
  22. {% block article %}
  23.     {{parent()}}
  24. {#  aquí se incluiría la capa con el listado de avisos,
  25.  con ajax intentaría renderizar esta zona y que el block aside se mantenga sin recargar salvo el recuadro de filtros que debería renderizar junto con este listado para actualizar el filtro seleccionado,
  26.  he probado renderizar con load() de js pero extendiendo en vez de incluir el template de lista_avisos pero las variables globales no capturan los datos del controlador #}
  27.      {%include 'AvisosAvisosBundle:Default:lista_avisos.html.twig' %}    
  28.  
  29. {% endblock %}
  30.  
  31. {% block javascripts %}
  32. {{parent()}}
  33. {% endblock %}

El problema es que tengo que renderizar en realidad dos espacios, el espacio de los avisos y el del recuadro en la barra lateral donde muestra los datos seleccionados como filtros (estilo mercadolibre) y entiendo que si envio por el controlador me va a dirigir a una sola direccion que sería la de "lista_avisos" pero luego debería renderizar el cuadro de filtros en el lateral.

Última edición por nelson_nnn; 10/09/2014 a las 21:40 Razón: Olvidé agregar información