Foros del Web » Programando para Internet » PHP »

Funcion detectar resolucion pantalla

Estas en el tema de Funcion detectar resolucion pantalla en el foro de PHP en Foros del Web. He creado esta función para ello, ya que tengo una cabecera en flash elástica: Código: <?php if(isset($HTTP_COOKIE_VARS["width_res"])) $res_pantalla = $HTTP_COOKIE_VARS["width_res"]; else { ?> <script type="text/javascript"> ...
  #1 (permalink)  
Antiguo 14/02/2008, 05:49
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 6 meses
Puntos: 0
Funcion detectar resolucion pantalla

He creado esta función para ello, ya que tengo una cabecera en flash elástica:
Código:
<?php 
if(isset($HTTP_COOKIE_VARS["width_res"])) 
$res_pantalla = $HTTP_COOKIE_VARS["width_res"];
else {
?>
<script type="text/javascript">
function creaCookie(nombre,valor,caducidad,path,domain,secure) {
var valor = screen.width
var dia_fin = new Date();
dia_fin.setDate(dia_fin.getDate() + caducidad);
document.cookie = nombre + "=" + escape(valor) +
((caducidad==null) ? "" : "; expires=" + dia_fin.toGMTString()) +
((path==null) ? "" : "; path=" + path) +
((domain==null) ? "" : "; domain=" + domain) +
((secure==null)? "" : "; secure"); 
}

creaCookie('width_res','valor'); 
if (document.cookie){  
        location = "index.php";
 }
 </script>
<?
}
switch ($res_pantalla) {
case 1024:
$flash_res="cabecera1024.swf";
break;
case 1280:
$flash_res="cabecera1280.swf";
break;
case 1360:
$flash_res="cabecera1360.swf";
break;
case 1400:
$flash_res="cabecera1400.swf";
break;
case 1440:
$flash_res="cabecera1440.swf";
break;
case 1600:
$flash_res="cabecera1600.swf";
break;
case 1680:
$flash_res="cabecera1680.swf";
break;
default:
$flash_res="cabecera1024.swf";
}
?>
No pasa nada, así funciona bien parece. El tema es que he querido hacer lo mismo pero en lugar de emplear el bloque switch, emplear un bloque condicional normal (if...{bla bla}; elseif...) y no funciona. No me da errores de sintaxis, simplemente no respeta los valores que le meto. Según unas sintaxis elige siempre el último valor de la cadena condicional y según otras se queda con la primera. A ver si alguien en un momento me escribe como lo haría y me cosco de dónde está mi error al querer hacerlo así.

Por cuestiones de aprendizaje me gustaría poder hacerlo de los dos modos (siempre me ha parecido la opcion switch las condicionales para torpes)
  #2 (permalink)  
Antiguo 14/02/2008, 06:09
Avatar de rameau1982  
Fecha de Ingreso: febrero-2007
Ubicación: Barcelona
Mensajes: 111
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Funcion detectar resolucion pantalla

yo lo haría así:

Código PHP:
if ($res_pantalla==1024) {
$flash_res="cabecera1024.swf";
}
elsif($res_pantalla==1280) {
$flash_res="cabecera1280.swf";
}
elsif($res_pantalla==1360) {
$flash_res="cabecera1360.swf";
}
elsif($res_pantalla==1400) {
$flash_res="cabecera1400.swf";
}
elsif($res_pantalla==1440) {
$flash_res="cabecera1440.swf";
}
elsif($res_pantalla==1600) {
$flash_res="cabecera1600.swf";
}
elsif($res_pantalla==1680) {
$flash_res="cabecera1680.swf";
}else(
$res_pantalla==1024) {
$flash_res="cabecera1024.swf";

ahora tengo una duda de si es elsif o elseif, prueba el que no te de error
  #3 (permalink)  
Antiguo 14/02/2008, 06:17
 
Fecha de Ingreso: diciembre-2007
Mensajes: 40
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Funcion detectar resolucion pantalla

Hola, efectivamente los condicionales son if, elseif y else. Si los utilizas, el código te ha de funcionar de forma correcta.

Un saludo.
  #4 (permalink)  
Antiguo 14/02/2008, 06:35
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Re: Funcion detectar resolucion pantalla

¿Y porque malgastar condicionales en este caso? Si el valor final siempre va a ser cabeceraXXXX.swf y XXXX va a coincidir con el valor del parametro, puedes hacer:
Código PHP:
$resoluciones_validas=array(1024,1280,1360,1400,1440,1600,1680);
$flash_res=(in_array($res_pantalla,$resoluciones_validas))?'cabecera'.$res_pantalla.'.swf':'cabecera1024.swf'
Asi practicas el operador ternario.

Si quieres añadir mas resoluciones, solo añades valores al array, y para quitar los quitas del array. Mas sencillo que meter y sacar 3 lineas en el switch.
  #5 (permalink)  
Antiguo 14/02/2008, 06:42
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Funcion detectar resolucion pantalla

Esto...pues si ponemos elseif y cambiamos la else esto:
Código:
else{
$flash_res="cabecera1024.swf";
}
(quitándole la condición ($res_pantalla==1024))...pues funciona perfecto, como debe ser...Claro, es así como estaba escribiéndolo yo, pero tratando de no usar corchetes {}. Pensé que en condicionales de una línea corta estaban de más. Por ejemplo, en la primera línea no los uso:
Código:
if(isset($HTTP_COOKIE_VARS["width_res"])) 
$res_pantalla = $HTTP_COOKIE_VARS["width_res"];
De todos modos también probé con ellos puestos en el bloque un par de veces pero debí escribirlos ya muy .
Caso arreglado, muchas gracias.

Una cosita más: obviamente esto con las cookies deshabilitadas no funca. Le acabo de añadir debajo del bloque condicional esta línea, para ese caso:

Código:
if (!isset($res_pantalla)) {
$flash_res="cabecera1024.swf";
}
Parece que funciona bien, pero me resulta muy débil la coherencia de mi estructura con eso puesto ahí, como descolgado. ¿Cómo lo haríais?

EDIT: yepa, darkj, voy a investigar eso...tiene buena pinta...
  #6 (permalink)  
Antiguo 14/02/2008, 07:35
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Funcion detectar resolucion pantalla

Bueno, bueno...Esto funciona como un reloj.
Darkj: veo que los operadores ternarios del php van más o menos igual que los del javascript(ahí están en la galleta -sudé tinta para componer ese javascript, por cierto, y aún no estoy a gusto). Excelente tu propuesta, pues el código me ha quedado limpísimo así:
Código:
<?php 
if(isset($HTTP_COOKIE_VARS["width_res"])) 
$res_pantalla = $HTTP_COOKIE_VARS["width_res"];
else {
?>
<script type="text/javascript">
function creaCookie(nombre,valor,caducidad,path,domain,secure) {
var valor = screen.width
var dia_fin = new Date();
dia_fin.setDate(dia_fin.getDate() + caducidad);
document.cookie = nombre + "=" + escape(valor) +
((caducidad==null) ? "" : "; expires=" + dia_fin.toGMTString()) +
((path==null) ? "" : "; path=" + path) +
((domain==null) ? "" : "; domain=" + domain) +
((secure==null)? "" : "; secure"); 
}

creaCookie('width_res','valor'); 
if (document.cookie){  
        location = "index.php";
 }
 </script>
<?
}

$res_val=array(1024,1280,1360,1400,1440,1600,1680); 
$flash_res=(in_array($res_pantalla,$res_val))?'cabecera'.$res_pantalla.'.swf':'cabecera1024.swf';  

?>
Ahora bien, más dudas de aprendizaje...para solventar el tema de cookie deshabilitada, he probrado a meter el final así:

Código:
if (!isset($res_pantalla)) {
$flash_res="cabecera1024.swf";
}
else
$resoluciones_validas=array(1024,1280,1360,1400,1440,1600,1680); 
$flash_res=(in_array($res_pantalla,$resoluciones_validas))?'cabecera'.$res_pantalla.'.swf':'cabecera1024.swf';
Funciona...pero funciona igual si lo dejo como antes, sin el (!isset). Mejor, pero mi pregunta es ¿por qué? ¿el operador ternario es capaz de tomar como un valor el que no haya valor en una de sus variables??
  #7 (permalink)  
Antiguo 14/02/2008, 08:21
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Re: Funcion detectar resolucion pantalla

el problema es q $res_pantalla si esta seteado!!! deberias probar con la funcion empty()
__________________
Degiovanni Emilio
developtus.com
  #8 (permalink)  
Antiguo 14/02/2008, 08:37
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Funcion detectar resolucion pantalla

A ver: $res_pantalla solo se setea si hay cookies, de ahí parte toda la función. $res_pantalla se debe sólo setear sólo si antes se ha seteado la variable width_res a través de HTTP_COOKIE_VARS. Si pilla el bucle con la cookie deshabilitada, por cierto, pasa algo curioso, y es que el html dibuja el javascript. Si hay cookie, el javascript no aparece, escondido detrás del php. Pues bien, en el bucle sin cookie, donde según entiendo $res_pantalla debería estar vacío, en efecto, parece que la condicional ternaria toma su valor como algo que queda fuera del array, pero existente, y manda el Else como resultado, o sea, 1024. Tiene toda la pinta, como tú dices, de que está seteada, pero con valor nulo, o algo así. No sé cómo puede ser eso, la verdad. De todos modos es ideal, si así fuera. Pero ¿cómo se puede setear una variable que depende de otra que es inexistente? raro ¿no?
  #9 (permalink)  
Antiguo 14/02/2008, 08:39
 
Fecha de Ingreso: junio-2006
Mensajes: 270
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Funcion detectar resolucion pantalla

Para que el flash se vea bien en distintas resoluciones lo hay que hacer es mirar "diagramacion liquida en flash". Consiste en hacer tu flash que no se redimensione, y tu controlas lo que quieras que se mueva o redimensione. Eso si, acabas un poco hasta las narices, pero es la solucion mas optima, sobre todo para firefox, que cada uno tiene una altura distinta
  #10 (permalink)  
Antiguo 14/02/2008, 08:56
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Funcion detectar resolucion pantalla

Vaya, ahora que estaba contento con este método...No da uno abasto a aprender, caray. Pues es verdad...Estoy mirando y es lo best...En fin, sigamos con los misterios del php por aquí y ya mismo estoy posteando 34564 dudas en el foro flash, jeje...
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 05:17.