Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

Ventana emergente desde Yii

Hace algunos días, y a petición de un lector, escribí una pequeña función Javascript que permitía mostrar una ventana emergente en el centro de la pagina, al momento de cargarla, y que desaparecia al cabo de unos segundos.

Esta vez, os propongo una ventana que se abre al llegar por primera vez al web, y en la que puedes mostrar informacion de la BBDD ya que esta gestionada desde Yii

Lo primero que voy a tener que hacer es presentaros el entorno para el que se hizo el ejemplo.

La idea es presentar un grupo determinado de noticias cuando un usuario llegue a la web, y no volverlo a hacer hasta al cabo de un numero de horas determinado (por ejemplo, hacerlo solo una vez al día…)

Todas las funciones, yo las deje montada en un widget, pero una alternativa mas sencilla, podria ser añadirlo a la pagina de funciones que todos terminamos teniendo. Entonces, podemos crear nuestra primera función:

public function load($agrupar){
if (!isset($this->dataprovider)){
$criteria=new CDbCriteria();
$criteria->join=’LEFT JOIN c_noticias_grupo AS g                                ON id_cgn = idGrupoNoticia’;
$criteria->addCondition(«cgn_agrupar=’$agrupar'»);
$criteria->addCondition(‘DATE(dtActivacion)         <=DATE(NOW()) AND DATE(dtDesactivacion)>=DATE(NOW())’);
$criteria->order=’dtActivacion DESC’;

$this->dataProvider=new CActiveDataProvider(‘CNoticias’,array(‘criteria’=>$criteria));
}
}

Esta función nos proporciona un dataProvider con las noticias activas del grupo que le indiquemos al momento de llamarla.

Ahora la función que nos genera la vista

if (!isset($_COOKIE['PresentaEmergente'])){
    setcookie("PresentaEmergente", true, time() + 3600);
    $bloqueo="";
    $salida=$this->obtencion($viewFile,$bloqueo);
    if ($salida!=""){
       $viewFile=$this->ruta('ventanaEmergente');
       $viewFile=$this->getViewFile($viewFile);
       $this->renderFile($viewFile,array('salida'=>$salida));
    }
 }

Lo que hacemos es comprobar si ya hemos mostrado la pantalla, comprobando la existencia de la cookie, y si no la hemos presentado, generamos la cookie con la hora de caducidad que nos interese (hacemos: hora actual + 3600 segundos..(1 hora p.ej)

Luego utilizamos una función (obtencion) para conseguir todas las noticias que se hayan de presentar y si cuando termina, nos ha generado algo ($salida!=»»)  generamos una vista que emergente y le pasamos los datos que nos ha preparado la función «obtencion»

La mayor parte del código involucrado es sobradamente conocido, por lo que voy a hacer hincapié  en la forma de definir la vista ventanaEmergente que nos permite lanzar desde un controlador una ventana que flota sobre la pagina generada.

La idea es generar un enlace que cuando se pulse, nos abra una ventana emergente, y luego forzar nosotros el ‘click’

Para la realización de la ventana emergente, nos apoyamos en «fancybox«. y el código sera algo como:

href="#noticiasEmergente" title="">
noticiasEmergente">
informacion" >
 
 <?php echo $salida ?>
</div>
</div>
</body>

Ahora incorporamos la conversión del link «ancla» a fancybox, y provocamos su «click»

<?php $rutina="
 \$(document).ready(function() {
$('#ancla').fancybox({
 'width' : 640,
 'height' : 480,
 'autoScale' : false,
 'autoSize' : false,
 'transitionIn' : 'none',
 'transitionOut' : 'none',
 
// 'onComplete': function(){
// setTimeout( function() {\$.fancybox.close(); },5000); // 5000 = 5 secs
// }
 });
 $('#ancla').eq(0).trigger('click');
 });
";
 
 Yii::app()->clientScript->registerScript('emergente',$rutina,CClientScript::POS_READY);?>

Señalar que:

He dejado comentado las lineas que permitirían cerrar la ventana al cabo de los segundos que se especificaran en «setTimeout»

Utilizo la posibilidad que me da Yii para cargar la función para garantizar donde se cargara la función.

Y ya esta. No os paso el fuente completo del widget porque el código dista mucho de estar optimizado y limpio para que corra en cualquier instalación, y depende de mi modulo de funciones, del diseño de tablas,….pero si alguien quiere optimizarlo, no tengo problemas de secretismo, osea que lo pedís, y os lo envío por correo electrónico, ya sabéis.

 

12 comentarios

  1. Buenos dias, tengo la siguiente inquietud: como hacer una ventana emergente para cargar un formulario en yii2.

    Gracias de antemano.

    1. Hola Mirtha: Si has seguido el articulo, veras como levantar una pantalla, en este caso con un listado. Si te fijas, se ha de enviar la pagina principal, y es esa pagina la que debe tener código para abrir una ventana y llamar una pagina. Todo esto esta en el articulo…Ya me diras si te puedo ayudar en algo mas
      Un saludo
      Miguel

  2. Buenos dias, tengo la siguiente inquietud: como hacer una ventana emergente para cargar un formulario en yii2.

    Gracias de antemano.

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 3.137.176.67
Proxy: 3.137.176.67
Remote host: ec2-3-137-176-67.us-east-2.compute.amazonaws.com
Remote port: 43416
** 3.137.176.67, 172.70.178.74