Hola
quisiera mostrar los reportes del sistema en una nueva pagina y/o pestaña (me gustaría saber las dos formas)
encontre en el cookbookhttp://www.yiiframework.com/doc/cookbook/48/ el ejemplo 4
pero se hace desde la vista
hay alguna forma de hacerlo desde el controlador?
saludos y gracias
cyberpol
(Cyberpol 777)
March 1, 2010, 12:46pm
2
Hasta donde entiendo no…
La idea del controlador es que estas respondiendo a la llamada (request) actual.
Eso genera un html de resultado (el view).
En el view vos tenes un link con target="_blank" (eso es lo que explica el cookbook 48)
Pero tenes que tenes en cuenta un par de cosas mas…
Podes usar javascritp para abrir una ventana aparte (eso tambien lo haria en la vista)
El target="_blank" tiene a desaparecer en los proximos estandares.
O podes usar directamente "dialog boxes" en jquery (para my mucho mejor)
Un ejemplo esta en la pagina de jquery.
jQuery UI Dialog
Espero haberte ayudado.
Hasta donde entiendo no…
La idea del controlador es que estas respondiendo a la llamada (request) actual.
Eso genera un html de resultado (el view).
En el view vos tenes un link con target="_blank" (eso es lo que explica el cookbook 48)
Pero tenes que tenes en cuenta un par de cosas mas…
Podes usar javascritp para abrir una ventana aparte (eso tambien lo haria en la vista)
El target="_blank" tiene a desaparecer en los proximos estandares.
O podes usar directamente "dialog boxes" en jquery (para my mucho mejor)
Un ejemplo esta en la pagina de jquery.
jQuery UI Dialog
Espero haberte ayudado.
ok, desde el controlador no puedo pasarle ningun parametro en el render para que me habra la pagina en una nueva ventana
que tengo que modificar en el template (tengo uno para reportes)
para que me habra una ventana nueva siempre?
un ejemplo me vendria bien, porque de js no se mucho
saludos
cyberpol
(Cyberpol 777)
March 1, 2010, 1:15pm
4
En el controlador podes pasar todos los parametros que quieras. Eso si es valido.
$this->render('la_vista',array('modelo'=>$model,'otroparamtro'=>true, etc....));
en la vista
if ($otroparametro){
// Hacer algo
} else {
// Otra cosa
}
creo que quiero hacer cosas que no se pueden hacer
lo que queria era no tener que modificar las vistas (como indica Ejemplo4)
y solo modificar el controlador
saludos
cyberpol
(Cyberpol 777)
March 1, 2010, 1:58pm
6
ok, entiendo…
Lamento no serte de ayuda…
hey! todo bien, el problema es que no conozco los limites, pero los voy aprendiendo
gracias PoL!
un saludo
Hola de nuevo
modifique las vistas tal como dice el ejemplo
,array('target'=>'_blank')
esto me abre una nueva pestaña
como hago para que me abra una ventana?
ngleich
(Ngleich)
March 2, 2010, 3:53pm
9
Creo que llego un poco tarde ya que cambiaste las vistas, pero se me ocurre que poniendo
Yii::app()->getClientScript()->registerCoreScript(‘jquery’);
Yii::app()->getClientScript()->registerScript(‘abrirAparte’, ‘jQuery(“a”).attr(“target”,"_blank")’);
en la acción del controlador se puede hacer que todos los link de la página se abran en página nueva. En caso de no querer que sean TODOS los links de la página (por ejemplo tenes un menu que queres que se abran en la misma página) hay que ver como filtrar dentro de “a” para que sea solo con los que se desean. Por ejemplo si se quiere solo los que tengan la clase “nuevo” seria Yii::app()->getClientScript()->registerScript(‘abrirAparte’, ‘jQuery(“a.nuevo”).attr(“target”,"_blank")’); .
Para que se abra en una nueva ventana, me parece que hay una forma en javascript con windows.open pero la verdad no se muy bien eso.
Saludos
ngleich:
Creo que llego un poco tarde ya que cambiaste las vistas, pero se me ocurre que poniendo
Yii::app()->getClientScript()->registerCoreScript(‘jquery’);
Yii::app()->getClientScript()->registerScript(‘abrirAparte’, ‘jQuery(“a”).attr(“target”,"_blank")’);
en la acción del controlador se puede hacer que todos los link de la página se abran en página nueva. En caso de no querer que sean TODOS los links de la página (por ejemplo tenes un menu que queres que se abran en la misma página) hay que ver como filtrar dentro de “a” para que sea solo con los que se desean. Por ejemplo si se quiere solo los que tengan la clase “nuevo” seria Yii::app()->getClientScript()->registerScript(‘abrirAparte’, ‘jQuery(“a.nuevo”).attr(“target”,"_blank")’); .
Para que se abra en una nueva ventana, me parece que hay una forma en javascript con windows.open pero la verdad no se muy bien eso.
Saludos
gracias por contestar!
el código va en el template?
Yii::app()->getClientScript()->registerCoreScript('jquery');
Yii::app()->getClientScript()->registerScript('abrirAparte', 'jQuery("a").attr("target","_blank")');
voy a probarlo y les cuento
para abrir la ventana yo uso el código de abajo, supongo que no es "la forma"
pero me funciona
echo CHtml::link('', '#',array('class'=>'btn_lov'
,'title'=>Yii::t('msj','title_buscar')
,'onclick'=>'lovMatriculas()'));
<script type="text/javascript">
function lovMatriculas(){
var url= "<?php echo $this->createUrl('rp_matriculas/lovRp_matriculas',
array('des_id_matricula'=>'Rp_novedades_mat_idMatricula'
,'des_matricula'=>'Rp_matriculas_matricula'
,'des_libro'=>'Rp_matriculas_libro'
,'des_folio'=>'Rp_matriculas_folio'
,'des_titulo'=>'Rp_titulos_descripcion'
,'des_especialidad'=>'Rp_especialidades_descripcion'
,'des_documento'=>'Personas_nro_documento'
,'des_nombre'=>'Personas_nombre'
,'des_apellido'=>'Personas_apellido'
)
)?>";
window.open(url,"lov_matriculas"
,"alwaysRaised=yes,toolbar=no,menubar=no,status=no
,resizable=yes,width=600,height=500,left=50,top=100");
}
</script>