Ver Mensaje Individual
  #6 (permalink)  
Antiguo 09/12/2014, 08:44
Avatar de SirZoX
SirZoX
 
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 18 años
Puntos: 2
Respuesta: Problemas con cookies y su orden de ejecución

De todas maneras, pongo el código como lo he hecho yo, que ha sido con una pequeña "trampa" pero que funciona a la primera y sin mucha historia.

creas tu archivo php, por ejemplo index.php con este comienzo antes del doctype
Código PHP:
<?php 
    $idioma 
$_COOKIE['idioma'];
    include (
'idiomas.php');
?>
Y ya dentro del body, colocas la típica imagen de la banderita del país del idioma que quieras mostrar colocando un enlace a la página "lang.php" y pasando como parámetro cada uno de los idiomas y además la URI en la que estamos. De manera que si estamos en una página que viene creada por alguna variable por ejemplo "pagina.php?ID=10", recogemos toda la URI para luego desde lang.php poder devolvernos a la misma página con el idioma ya cambiado.
Código PHP:
    <a href="lang.php?l=es&source=<?php echo $_SERVER['REQUEST_URI']; ?>"><img src="ESP.png" alt="img"></a><br>
    <a href="lang.php?l=en&source=<?php echo $_SERVER['REQUEST_URI']; ?>"><img src="GBR.png" alt="img"></a><br>
    <a href="lang.php?l=it&source=<?php echo $_SERVER['REQUEST_URI']; ?>"><img src="ITA.png" alt="img"></a>
Ahora el contenido de "lang.php", donde capturamos desde la URL tanto el lenguaje ("l") como la página origen ("source").
Con el switch determinamos cual es el idioma en que queremos ver la página, establecemos la cookie de turno y refrescamos la página devolviéndonos a la página original, ya con cookies establecidas, de manera que cuando cargue, mostrará el idioma deseado.
Código PHP:
<?php
$source 
$_GET['source'];
$idioma $_GET['l'];
    
switch(
$idioma) {
    case 
'es'setcookie('idioma','es'); refresh(0,$source); break;
    case 
'en'setcookie('idioma','en'); refresh(0,$source); break;
    case 
'it'setcookie('idioma','it'); refresh(0,$source); break;
}
?>
Quedaría mostrar el contenido de "idiomas.php" que podría ser algo de este estilo:
Código PHP:
<?php
        
//hemos capturado $idioma a través de $idioma=$_COOKIE['idioma'] al inicio del archivo "index.php" por tanto la tenemos disponible aquí.
    
switch ($idioma)  {
        case 
'es':
        case 
NULL;
        case 
'':
            
define ("saludo","Hola");
        break;
        
        
        case 
'en':
            
define ("saludo","Hello");
        break;
        
        
        case 
'it':
            
define ("saludo","Ciao");
        break;
        
    }
    


?>
Y con un simple "echo saludo" tendríamos el saludo impreso por pantalla en el idioma seleccionado.

Espero que se me haya entendido bien, es la primera vez creo que pongo tanta explicación y no sé si el orden y la explicación será del todo correcta, pero bueno, esperemos que le valga a alguien.