Saludos
Tengo una duda tengo esto en un controlador de symfony 2.7
$html = $this->renderView('document/_print.html.twig', array( 'data' => $data, ));
Mi duda es cómo puede imprimir el contenido de $html
.
Gracias.
Respuestas
No entiendo muy bien la pregunta. El método renderView()
ya te devuelve una cadena de texto con el contenido HTML renderizado. Para mostrar este contenido en una página HTML mediante JavaScript puedes usar cualquier método tradicional, desde el arcaico document.write()
hasta el más común innerHTML()
.
@javiereguiluz
No me expliqué bien. Es que quiero enviarlo a imprimir. En este momento el documento aparece previsualizado, pero dentro de un layout principal.
Lo inserté de esta forma:
{{ render(controller('AppBundle:Controlador:printPreview', {'code': code })) }}
Además, cree un botón para imprimir en js.
window.print()
Lo que quiero es imprimir el contenido que devuelve esta action “printPreview”, la función de js imprime todo. Habrá una forma de imprimir solo eso.
Gracias.
@dariongg
He estado buscando un poco y al parecer, no hay una forma elegante de hacerlo. La mejor solución que he encontrado es la de este comentario de StackOverflow. Tendrías que encerrar el contenido en un elemento HTML:
<div id="imprimible" {{ render(controller('AppBundle:Controlador:printPreview', {'code': code })) }} </div>
Y luego con CSS ocultar todo al imprimir salvo el elemento #imprimible
:
@media print { body * { visibility: hidden; } #imprimible, #imprimible * { visibility: visible; } #imprimible { position: absolute; left: 0; top: 0; } }
@javiereguiluz
Gracias, logré imprimir el documento correctamente. Pero todavía me surge una duda. Lo imprimo, pero quiero que después de imprimir cierre la sesión de usuario, para ello llamo a la ruta "logout".
Tengo esto en javascript:
function printDoc() { window.print(); // sleep(2000); var route = "{{ path('logout') }}"; window.location = route; // window.location.href = route; }
pero no me funciona. Imprime el documento pero no logro que se redireccione a logout.
comentando la parte de window.print(),
window.location o window.location.href, etcc. lo unico que hace es poner en la url esto {{ path("logout") }}
@dariongg
Primero debes comprobar que el valor de path('logout')
es correcto. Aunque en tu caso no va a importar, cuando uses Twig para generar código JavaScript, acuérdate de escapar la información para JavaScript:
var route = "{{ path('logout')|e('js') }}";
Por otra parte, si usas una versión moderna de Symfony puedes usar el siguiente atajo para generar la URL para desconectarse del firewall actual:
var route = "{{ logout_path()|e('js') }}";
@javiereguiluz
Gracias use el mismo codigo
<script type="text/javascript"> function printDoc() { window.print(); var url = "{{ path('logout') | e('js') }}"; document.location.replace(url); } </script>
en la plantilla twig y funciono.
todavia tengo un pero,
window.print(); // Se ejecuta //----------------------------- NO se ejecuta var url = "{{ path('logout') | e('js') }}"; document.location.replace(url);
Despues de imprimir no se ejecuta la redirección, pero si elimino window.print(), Si.
@dariongg
En esta respuesta de StackOverflow le recomiendan que espere un poco desde que se imprime la página hasta que se redirecciona. Es parecido a lo que tu haces, pero en vez de un sleep()
usan un setTimeout()
.
@javiereguiluz
Gracias.
con setTimeout() funciona correctamente.
Esto no tiene nada que ver con el problema anterior, pero puede ser de ayuda para otra persona.
En mi caso tengo conexiones con 3 bd (1 mysql y 2 sql server), me paso que no reconnocia los acentos y ñ.
para eso se definio charset para cada conexion, el pero es que el para metro a recibir en este caso UTF 8, se debe escribe de diferente manera para mysql, que para ms sql server.
doctrine: dbal: connections: conexion1: // mysql charset: UTF8 conexion2: // mssql charset: UTF-8
En este caso estoy utilizando symfony 2.7
@dariongg