Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Joomla »

[SOLUCIONADO] Internet Explorer 8 - ¿Límite a funciones?

Estas en el tema de Internet Explorer 8 - ¿Límite a funciones? en el foro de Joomla en Foros del Web. Hola. Hace poco completé una función para detectar páginas en un sitemap e insertar un css en caso afirmativo. Es así: Código: <?php $DomDocument = ...
  #1 (permalink)  
Antiguo 08/11/2013, 11:53
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Internet Explorer 8 - ¿Límite a funciones?

Hola.

Hace poco completé una función para detectar páginas en un sitemap e insertar un css en caso afirmativo.

Es así:

Código:
<?php
$DomDocument = new DOMDocument();
$DomDocument->preserveWhiteSpace = false;
$DomDocument->load('http://www. sitio .com/index.php?option=com_xmap&view=xml&tmpl=component&id=1');
$DomNodeList = $DomDocument->getElementsByTagName('loc');
foreach($DomNodeList as $url) {
$urls[] = $url->nodeValue;
}
// Secciones;
if(in_array("http://www.sitio .com/es/categoria/categoria-a",$urls)){
$css= '<style type="text/css">ul#areas li#ZAF, path#jvectormap1_ZAF {display: inherit;}</style>';
}
echo $css;

Después hay muchas más funciones, por razón de las múltiples categorías:

Código:
if(in_array("http://www.sitio .com/es/categoria/categoria-b",$urls)){
$css= '<style type="text/css">ul#areas li#ZAF, path#jvectormap1_ZAF {display: inherit;}</style>';
}
echo $css;


----- etc.

Funciona perfectamente.

Terminada la web me meto en corregir formatos en los navegadores.

Chrome, FF y Opera perfectos. Y también Internet Explorer 9. Sin problemas.

Me meto en Internet Explorer 8 (ojalá se muera pronto como el 6) y me sale la página en blanco.

Después de un millón de vueltas por la web, sustituyendo esto y aquello, descubro que el fallo comienza cuando llegas a un número de terminado de funciones:

Código:
if(in_array("http://www.sitio .com/es/categoria/categoria-b",$urls)){
$css= '<style type="text/css">ul#areas li#ZAF, path#jvectormap1_ZAF {display: inherit;}</style>';
}
echo $css;
Creyendo que hay algún defecto en alguna de ellas, finalmente se trata de que parace que no soporta más que un número de archivos css o reglas.

Acabo de descubrir que hay un límite de 31 styles en cada página en IE8.

O eso creo.

¿Me podéis confirmar si es cierto?

Última edición por JUMASOL; 08/11/2013 a las 12:00
  #2 (permalink)  
Antiguo 08/11/2013, 12:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Te recuerdo que PHP se ejecuta del lado del servidor, así que un problema de "funciones" no es, sería ridículo pensar que el navegador afecta la ejecución de código en el servidor.

Lo que si puede estar pasando es que el HTML que generas finalmente tiene problemas con dicho navegador, pero ahí está la diferencia, no es problema del servidor ni del código PHP, en todo caso es problema de tu HTML en si mismo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/11/2013, 12:11
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

No, no lo es. Ya lo he comprobado. Se trata de número de estilos css.


¿Hay algún modo de combinar las funciones en negrita?

Código:
<?php
$DomDocument = new DOMDocument();
$DomDocument->preserveWhiteSpace = false;
$DomDocument->load('http://www. sitio .com/index.php?option=com_xmap&view=xml&tmpl=component&id=1');
$DomNodeList = $DomDocument->getElementsByTagName('loc');
foreach($DomNodeList as $url) {
$urls[] = $url->nodeValue;
}
// Secciones;
if(in_array("http://www.sitio .com/es/categoria/categoria-a",$urls)){
$css= '<style type="text/css">ul#areas li#ZAF, path#jvectormap1_ZAF {display: inherit;}</style>';
}
echo $css;

if(in_array("http://www.sitio .com/es/categoria/categoria-b",$urls)){
$css= '<style type="text/css">ul#areas li#ZAG, path#jvectormap1_ZAG {display: inherit;}</style>';
}
echo $css;

if(in_array("http://www.sitio .com/es/categoria/categoria-c",$urls)){
$css= '<style type="text/css">ul#areas li#ZAX, path#jvectormap1_ZAX {display: inherit;}</style>';
}
echo $css; 

Última edición por JUMASOL; 08/11/2013 a las 12:17
  #4 (permalink)  
Antiguo 08/11/2013, 12:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Claro, es muy fácil, sólo mira:
Código PHP:
Ver original
  1. echo '<style>';
  2.  
  3. // todas tus condiciones
  4.  
  5. if ($foo) {
  6.   echo '.bar { color: red; }';
  7. }
  8.  
  9. echo '</style>';

Tu problema es que imprimes cada ves el mismo código, lo cual es un desperdicio, si al final vas a imprimir CSS con que abras y cierres el bloque una vez basta.

Ya dentro de tus condiciones sólo debes imprimir las reglas de CSS sin HTML.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 08/11/2013, 12:45
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Me imagino que podrá hacerse, pero no acabo de verlo.

No imprime siempre el mismo código.

Ten en cuenta que cuando tenemos éste url en el array:

http://www.sitio .com/es/categoria/categoria-a"

debe insertarse esto muy concretamente.

<style type="text/css">ul#areas li#ZAF, path#jvectormap1_ZAF {display: inherit;}</style>

En el caso de otra url distinta, tiene su propio css con un selector id específico.

Cierto que siempre se imprime la misma regla css, pero no veo cómo aplicar la solución que das.
  #6 (permalink)  
Antiguo 08/11/2013, 12:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Bueno, si no lo ves tal vez necesites lentes.
Código PHP:
Ver original
  1. echo '<style type="text/css">';
  2.  
  3. if(in_array("http://www.sitio .com/es/categoria/categoria-a",$urls)){
  4. echo 'ul#areas li#ZAF, path#jvectormap1_ZAF {display: inherit;}';
  5. }
  6.  
  7. if(in_array("http://www.sitio .com/es/categoria/categoria-b",$urls)){
  8. echo 'ul#areas li#ZAG, path#jvectormap1_ZAG {display: inherit;}';
  9. }
  10.  
  11. if(in_array("http://www.sitio .com/es/categoria/categoria-c",$urls)){
  12. echo 'ul#areas li#ZAX, path#jvectormap1_ZAX {display: inherit;}';
  13. }
  14.  
  15. echo '</style>';

Usa tu sentido común, es imposible que no sepas hacer un cambio así de simple.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 08/11/2013, 13:02
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

No. No me ha salido.

No sé si tienes en cuenta el resto del script.
  #8 (permalink)  
Antiguo 08/11/2013, 13:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Cita:
Iniciado por JUMASOL Ver Mensaje
No sé si tienes en cuenta el resto del script.
Pues obviamente no soy adivino como para saber como es el resto de tu script.

Pero el ejemplo debería ser lo suficientemente claro para que lo apliques por ti mismo, reflexiona bien la idea, no hay más.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 08/11/2013, 13:06
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Está arriba:

Código:
<?php
$DomDocument = new DOMDocument();
$DomDocument->preserveWhiteSpace = false;
$DomDocument->load('http://www. sitio .com/index.php?option=com_xmap&view=xml&tmpl=component&id=1');
$DomNodeList = $DomDocument->getElementsByTagName('loc');
foreach($DomNodeList as $url) {
$urls[] = $url->nodeValue;
}
Se busca en un sitemap y en cada caso de url se inserta un estilo muy concreto. El problema es que no se trata de detectar una sola, sino una serie de ellas.
  #10 (permalink)  
Antiguo 08/11/2013, 13:13
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 6 meses
Puntos: 43
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

El tema es que, por lo que decís:

Cita:
Chrome, FF y Opera perfectos. Y también Internet Explorer 9. Sin problemas.

Me meto en Internet Explorer 8 (ojalá se muera pronto como el 6) y me sale la página en blanco.
No hay corrección de código php que valga, como decía pateketrueke al principio.

Mostranos el código fuente de lo que imprime en IE 8, seguro que se va a solucionar más rápido viendo eso.
  #11 (permalink)  
Antiguo 08/11/2013, 13:16
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Ya te he dicho el problema; demasiados estilos en la misma página por culpa de este script.

Ya me había parecido que estaba mal escrito por demasiadas funciones.

Al principio sólo iban a ser 5. Luego se ha complicado.

¿Se puede combinar o no?
  #12 (permalink)  
Antiguo 08/11/2013, 13:25
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 6 meses
Puntos: 43
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Entonces, con el código que te pasó pateketrueke tendría que funcionar.

Mirá, vos tenías esto:

Cita:
if(in_array("http://www.sitio .com/es/categoria/categoria-a",$urls)){
$css= '<style type="text/css">ul#areas li#ZAF, path#jvectormap1_ZAF {display: inherit;}</style>';
}
Que, cada vez que entra al if, abre y cierra una estiqueta de estilos, que como entraba muchas veces, te generaba más de 30 como decís.

Qué corrigió el?

Código PHP:
Ver original
  1. echo '<style type="text/css">'; //Abre solo una etiqueta al principio
  2.  
  3. //Imprime cada estilo dentro de esa misma etiqueta
  4.  
  5. if(in_array("http://www.sitio .com/es/categoria/categoria-a",$urls)){
  6. echo 'ul#areas li#ZAF, path#jvectormap1_ZAF {display: inherit;}';
  7. }
  8.  
  9. if(in_array("http://www.sitio .com/es/categoria/categoria-b",$urls)){
  10. echo 'ul#areas li#ZAG, path#jvectormap1_ZAG {display: inherit;}';
  11. }
  12.  
  13. if(in_array("http://www.sitio .com/es/categoria/categoria-c",$urls)){
  14. echo 'ul#areas li#ZAX, path#jvectormap1_ZAX {display: inherit;}';
  15. }
  16.  
  17. echo '</style>'; //Cierra al final

Entonces con eso solo abrís una etiqueta, por más que entre a 100 ifs.

Entonces, si el tema era que no se puede tener más de 30 hojas de estilo, con eso está solucionado.
  #13 (permalink)  
Antiguo 08/11/2013, 13:31
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 6 meses
Puntos: 43
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Si conocen un buen sinónimo de "entonces" que sea barato avísenme que estoy buscando uno.
  #14 (permalink)  
Antiguo 08/11/2013, 13:33
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Cita:
Iniciado por JUMASOL Ver Mensaje

Acabo de descubrir que hay un límite de 31 styles en cada página en IE8.

O eso creo.

¿Me podéis confirmar si es cierto?
Si es cierto, Internet explorer 6 a 9 tienen ese límite (31 sheets y 4095 reglas), en Internet explorer 10 se amplió a 4095 sheets y 65534 reglas. Tu problema se soluciona abriendo una sola etiqueta style.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #15 (permalink)  
Antiguo 08/11/2013, 17:29
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Internet Explorer 8 - ¿Límite a funciones?

Sí, ya lo he solucionado como me habéis indicado.

Todo en la misma etiqueta.

Me había obcecado con esto:

Código:
if ($foo) {
En realidad es que soy muy novato en este tema.

Además, lo que buscaba adicionamente es si se pueden eliminar todas esas funciones y ponerlas en una sola. Por ahorrar código y hacer el sitio más liviano.

A cuenta de este tema y otras cuestiones similares se me ha triplicado el peso del índex.

Lo marco como solucionado.

Gracias por vuestra colaboración.

Etiquetas: explorer, internet, php
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:18.