Foros del Web » Programando para Internet » PHP » Symfony »

Refactorizar sitio en symfony con ajax?

Estas en el tema de Refactorizar sitio en symfony con ajax? en el foro de Symfony en Foros del Web. Gente existe algun tutorial como guía para refactorizar un sitio en symfony2 y que sea a una sola página renderizando sectores y partes con de ...
  #1 (permalink)  
Antiguo 10/09/2014, 17:38
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 11 años, 2 meses
Puntos: 0
Refactorizar sitio en symfony con ajax?

Gente existe algun tutorial como guía para refactorizar un sitio en symfony2 y que sea a una sola página renderizando sectores y partes con de la pagina con ajax, la cuestion es que tengo que lograr recargar ciertos templates twig pero que cuando hago un render desde un controlador además paso parametros a variables globales twig en el front que proveen, esos parametros a su vez a otros componentes, en ese caso como podría hacerlo mediante ajax? he probado con el metodo load() de js que renderiza los templates pero no me llegan los parametros desde los controladores a las variables globales en los templates twig mediante los app.request.attribute.get() o app.request.get(), me imagino que debe ser porque el fragmento de codigo se carga por load() en un sector especifico y los get() de twig no capturan los datos...
  #2 (permalink)  
Antiguo 10/09/2014, 20:42
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Refactorizar sitio en symfony con ajax?

Puedes colocar un ejemplo de como estas haciendo las peticiones y como estas pasando las variables al template o mas bien como esperas pasarlos.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 10/09/2014, 21:36
 
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
  #4 (permalink)  
Antiguo 11/09/2014, 09:23
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Refactorizar sitio en symfony con ajax?

Ok, entonces necesitas hacer que jquery solicite la petición y que solo refresque la parte que necesitas cambiar. te dejo un ejemplo que usa esta idea con el replaceWhith de jquery. el ejemplo se basa en formularios pero la idea es básicamente la misma que quieres emplear.
http://thinkingoo.wordpress.com/2014...2-jquery-ajax/
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 11/09/2014, 19:36
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Refactorizar sitio en symfony con ajax?

Pero es posible refrescar dos zonas a la vez de la página en la misma petición? porque el problema es ese son dos zonas a refrescar, una es donde se muestran los avisos y la otra es la que muestra los items filtrados, o a la zona de filtro debo generarla en javascript directamente en vez de usar un plantilla?
  #6 (permalink)  
Antiguo 11/09/2014, 20:29
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Refactorizar sitio en symfony con ajax?

puedes hacerlo mediante dos peticiones a dos métodos distintos del controlador
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 13/09/2014, 00:34
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Refactorizar sitio en symfony con ajax?

Bueno eso si ha funcionado, el problema es que las rutas al controlador que uso no se muestran con ajax y por ende no puedo pasar valores por sus parametros para poder filtrar por localidad y rubro a la vez, mi ruta es similar a lo siguiente
Código yml:
Ver original
  1. avisos_por_localidad:
  2.     path:      /{localidad}/rubro-{rubro}
  3.     defaults:  { _controller: AvisosAvisosBundle:Default:avisosPorLocalidad }

si busco por localidad funciona pero para agregar el rubro a la direccion ya no sirve porque ajax no muestra las rutas y estoy usando el app.request.attribute.get('localidad') para capturar valores y pasarlos al controlador, no hay alguna manera de capturar esos valores con javascript sobre las variables twig no?
  #8 (permalink)  
Antiguo 13/09/2014, 01:58
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Refactorizar sitio en symfony con ajax?

Creo que te refieres a esto: https://github.com/FriendsOfSymfony/FOSJsRoutingBundle
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 13/09/2014, 16:01
 
Fecha de Ingreso: octubre-2013
Mensajes: 35
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Refactorizar sitio en symfony con ajax?

Ok ya lo probaré, y algo que he visto es el framework Angular.js que creo que permite delimitar las variables en twig para ver si de esa forma se puede extraer los parametros por javascript
  #10 (permalink)  
Antiguo 14/09/2014, 09:04
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Refactorizar sitio en symfony con ajax?

Angular no es para eso, recuerda que las variables de aplicación solo estan disponibles durante el tiempo de cargado de la respuesta. Asi que una vez cargada la pantalla en el cliente no hay forma de acceder a esos valores.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:58.