Ayuda!! Pasar de javascript a twig

1,671 views
Skip to first unread message

JHONATHAN MEJIA

unread,
Jun 17, 2015, 11:16:49 AM6/17/15
to symfo...@googlegroups.com
Hola amigos quisiera ver si se puede enviar el valor de una javascript a una variable twig:

por ejemplo: Si un usuario da click en un enlace, el JS le pide que ingrese dos fechas y las almaceno en las variables fecha y fechaa.. ahora lo que necesito es como enviarle a las variables twig (fecha1y fecha2) los valores que ingrese mediante JS.

<script>
   
function
fechas()
 
{
   
var
fecha = prompt("Ingresar Fecha 1: Año-mes-día");
   
var
fechaa = prompt("Ingresar Fecha 2: Año-mes-día");  

       
{%
set fecha1=fecha%}
       
{%
set fecha2=fechaa%}
 
}
</script>

aquí llamo a la 
función

  <a onclick="fechas();" href="{{path('jhonathan_sicondc_reportea',{'fecha1':fecha,'fecha2':fechaa})}}"><i class="fa fa-file-pdf-o fa-fw"></i> Avances Microcurriculares</a>


Javier Marcon

unread,
Jun 17, 2015, 2:48:16 PM6/17/15
to symfo...@googlegroups.com
El 17/06/15 a las 12:16, JHONATHAN MEJIA escibió:
Hay un tema, lo que se ejecuta en twig se ejecuta en el servidor (antes de que cargue la página), despues el navegador carga la página, la muestra al cliente y el cliente carga las fechas. Pero para cuando el cliente cargó las fechas, el request que llamaba a Twig (lo que se ejecuta en el servidor) ya terminó hace rato. Lo que podes hacer es un formulario y que cuando cargue las fechas se agreguen a un input del formulario, y cuando haces submit van a ir las fechas en el request que genera el submit. O también podes usar las fechas dinámicamente con ajax (Jquery por ejemplo), pero acordate que en todo request primero se ejecutan las cosas en el servidor (controlador, twig, doctrine, etc.) y después se manda todo al cliente para que lo muestre el navegador y lo que ejecuta javascript lo ejecuta el cliente (navegador) después que se cargó la página.

Saludos,

Javier.

JHONATHAN MEJIA

unread,
Jun 18, 2015, 4:35:10 PM6/18/15
to symfo...@googlegroups.com
Gracias por tu respuest... he investigado y he buscado información y encontré este código, pero no logro abrir la ruta 
es decir según el mensaje me sale ok, quiere decir que esta bien pero no se me ejecuta la acción del controlador que es ejecutar un pdf.... haciéndole de forma manual estableciendo las fechas me genera el pdf, pero al querer utilizar y enviar los parámetros desde el ajax no se ejecuta.. te dejo el código a ver si me puedes ayudar o si tienes alguna pagina que me podría ayudar..

te agradezco de antemano.

<script type="text/javascript">
   
jQuery(document).ready(function() {

       
jQuery("#enlaceajax").click(function(evento) {
           
evento.preventDefault();
           
var
fecha = prompt("Ingresar Fecha 1: Y-M-D");
           
var
fechaa = prompt("Ingresar Fecha 2: Y-M-D");

            $
(
'#tabla').load("{{path('jhonathan_sicondc_reportea',{'fecha1':'fech1','fecha2':'fech2'})}}");//esta linea le puse por que vi que asi llamaban y ejecutaban una di

           
var url = "{{path('jhonathan_sicondc_reportea',{'fecha1':'fech1','fecha2':'fech2'})}}";
           
url = url.replace("fech1", fecha);
           
url = url.replace("fech2", fechaa);
             
             

           
jQuery.ajax({
               
url: url,
               
timeout: 5000,
               
success: function(data) {
                   
alert('ok');
               
},
               
error: function() {
                   
alert('mal');
               
}
           
});

       
});

   
});
</script>  

 

Eloy González Andueza

unread,
Jun 18, 2015, 4:50:15 PM6/18/15
to symfo...@googlegroups.com
Prueba de esta forma:

$ajax.({
method: "POST" o "GET", //esto depende de como lo tengas
url: url,
 dataType
: 'html', //si esperas un html o json si esperas un json
data: { fecha1:fecha, fecha2: fechaa }
success:fucntion(data) {
console.log(data) //para comprobar lo que te devuelve
//Si te devuelve lo que esperas después lo podrás cargar en el div
$('#tabla').html(data);
},
error:function(){
//lo que quieras hacer
}
});

Comprueba con firebug si de verdad estás llamando al controlador correctamente.
Un saludo



--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

JHONATHAN MEJIA

unread,
Jun 18, 2015, 6:06:27 PM6/18/15
to symfo...@googlegroups.com
Gracias por tu respuesta... he pobrado tu codigo y si llama al controlador he probado mandando un parametro y me indica un error:
POST http://localhost/SICONDC/web/app_dev.php/Docente/reportea/null/2015-06-05 500 (Internal Server Error)

me quiere decir que si esta llamando al controlador...
pero no se me genera el pdf... cuando declaro valores estaticos de las fechas se me descarga un archivo pdf del reporte y esta perfecto el controlador...

pero no se porque no se me descarga el pdf.. 

este es mi controlador
 public function reporteaAction($fecha1,$fecha2) {
        $em = $this->getDoctrine()->getManager();
        //$fecha1='05-06-2015';
       // $fecha2='10-06-2015';
        $fec1 = new DateTime($fecha1);
        $fec2= new DateTime($fecha2);
        
        $did = 1;
        $datos = $em->getRepository('JHONATHANSicondcBundle:Dictado')->getdictados2($did,$fec1,$fec2);
        $html = $this->renderView('JHONATHANSicondcBundle:Docente:reportea.html.twig', array(
            'datosdictado' => $datos));

        $response = new Response(
                $this->get('knp_snappy.pdf')->getOutputFromHtml($html, array('lowquality' => false,
                    'print-media-type' => true,
                    'encoding' => 'utf-8',
                    'page-size' => 'Letter',
                    'outline-depth' => 8,
                    'orientation' => 'Portrait',
                    'title' => 'Reporte Asignaturas - Especialidades',
                    'user-style-sheet' => 'css2/bower_components/bootstrap/dist/css/bootstrap.min.css',
                    'header-right' => 'SICONDC',
                    'header-font-size' => 10,
                    'footer-right' => 'Pag. [page] de [toPage]',
                    'footer-font-size' => 7,
                )), 200, array(
            'Content-Type' => 'application/pdf',
            'Content-Disposition' => 'attachment; filename="ReporteAvanceMicrocurricular.pdf"'
                )
        );
        return $response;
    }

esta es mi ruta

jhonathan_sicondc_reportea:
    pattern: /Docente/reportea/{fecha1}/{fecha2}
    defaults: { _controller: JHONATHANSicondcBundle:Docente:reportea }


y este es el ajax

<script type="text/javascript">
    $(document).ready(function() {

        $("#enlaceajax").click(function(evento) {
            evento.preventDefault();
            var fecha = prompt("Ingresar Fecha 1: Y-M-D");
            var fechaa = prompt("Ingresar Fecha 2: Y-M-D");

            var url = "{{path('jhonathan_sicondc_reportea',{'fecha1':'fech1','fecha2':'fech2'})}}";
            url = url.replace("fech1", fecha);
            url = url.replace("fech2", fechaa);
            $.ajax({
                method: "POST",
                url: url,
                dataType: 'html', //si esperas un html o json si esperas un json
                data: {fecha1: fecha, fecha2: fechaa},
                success: function(data) {
                    console.log(data);
                    $('#tabla').html(data);
                    alert('ok');
                },
                error: function() {
                    alert('mal');
                }
            });
        });
    });
</script>


y lo llamo de esta manera, por medio del enlace

<a id="enlaceajax" href="#"><i class="fa fa-file-pdf-o fa-fw"></i> Avances Microcurriculares</a>


Eloy González Andueza

unread,
Jun 18, 2015, 6:17:19 PM6/18/15
to symfo...@googlegroups.com

Según la ruta del error sólo le estás pasando una fecha, la otra se la estas pasando como null. Pon tu routing para más información. Utilizando firebug puedes obterner el error exacto mirando la respuesta de la llamada. También te recomiendo que utilices xdebug para debugear mejor el código. Pero en resumen creó que te falla al crear el datatime con un valor null.
Un saludo

JHONATHAN MEJIA

unread,
Jun 18, 2015, 6:25:42 PM6/18/15
to symfo...@googlegroups.com
jjj.. esk ahi solo le mande la segunda fecha. la primera no mande por eso salio ese error..

pero si le mando las dos si funciona y me sale lo siguiente .. ahi esta la imagen..

pero no se me descarga el pdf..


Jeronimo SALAZAR RAMIREZ

unread,
Jun 19, 2015, 10:33:25 AM6/19/15
to symfo...@googlegroups.com
Pues eso indica que todo esta bien, lo que deberías checar es como descargar es como devolver un pdf a través de ajax.

--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
-------------------------------------------------------
Si programas  en PHP, usa Symfony
-------------------------------------------------------
Navega mas seguro con FireFox
------------------------------------------------------

JHONATHAN MEJIA

unread,
Jun 19, 2015, 12:26:44 PM6/19/15
to symfo...@googlegroups.com
Gracias amigos por su respuesta me han ayudado bastante....

Solo le puse la siguiente linea de código y funciono..

window.open(url);

Gracias!!
Reply all
Reply to author
Forward
0 new messages