Foros del Web » Programando para Internet » PHP »

sitio multilenguaje y cookie

Estas en el tema de sitio multilenguaje y cookie en el foro de PHP en Foros del Web. Buenas, hace mas de un día que estoy renegando con un sitio multilenguaje y las cookies sin tener resultados, así que acudo a la ayuda ...
  #1 (permalink)  
Antiguo 22/06/2010, 23:08
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
sitio multilenguaje y cookie

Buenas, hace mas de un día que estoy renegando con un sitio multilenguaje y las cookies sin tener resultados, así que acudo a la ayuda del foro

La cuestión es así estoy creando un sitio cuya pagina de inicio son fotos de 3 banderas:
Código HTML:
Ver original
  1. <ul>
  2.     <li><a href="<?php echo 'en/'.$url->urlAmigables('index.php?controlador=inicio',1);?>" title="Enter"><img src="<?php echo $config->get('template')?>/images/United-Kingdom.png"  alt="Enter" width="78" height="78" /></a></li>
  3.     <li><a href="<?php echo 'es/'.$url->urlAmigables('index.php?controlador=inicio',1);?>" title="Entrar"><img src="<?php echo $config->get('template')?>/images/Spain.png"  alt="Entrar" width="78" height="78" /></a></li>
  4.     <li><a href="<?php echo 'fr/'.$url->urlAmigables('index.php?controlador=inicio',1);?>" title="Entre&eacute;"><img src="<?php echo $config->get('template')?>/images/France.png"  alt="Entre&eacute;" width="78" height="78" /></a></li>
  5.     </ul>
los link quedan asi:
http://xxxx/es/inicio.php
http://xxxx/en/inicio.php
http://xxxx/fr/inicio.php

la idea es que esta pagina se muestre 1 sola vez al usuario una vez que selecciona en que idioma la quiere ver, se guarda la seleccion en una cookie y cada vez que vuelve a entrar verifique si existe la cookie y lo redireccione a la version que habia seleccionado y quedo guardada en la cookie.

Bien para hacer esto intento usar el siguiente codigo:
Código PHP:
Ver original
  1. //cargo el lenguaje del sistema
  2.         if($config->get('multi')==1) {
  3.         $leng = Language::singleton();
  4.         $leng->get_session_handler();
  5.         $idiomaActual = $config->get('lenguaje');
  6.        
  7.         if(!empty($_GET['leng'])){
  8.             setcookie ("apolo_leng", $_GET['leng'],0,"/",dirname(__FILE__),0);
  9.         }
  10.         session_start();
  11.  
  12.         $_SESSION['leng'] = $idiomaActual;
  13.  
  14.         if(isset($_GET['leng']) && !isset($_COOKIE['apolo_leng'])) {
  15.             $idiomaActual = $_GET['leng'];
  16.             $_SESSION['leng'] = $_GET['leng'];
  17.             setcookie ("apolo_leng", $idiomaActual,0,"",dirname(__FILE__),0);      
  18.         }
  19.         elseif(isset($_COOKIE['apolo_leng'])) {
  20.             if(file_exists($config->get('root')."/lenguajes/".$_COOKIE['apolo_leng'].".php")) {
  21.             $idiomaActual = $_COOKIE['apolo_leng'];
  22.             $_SESSION['leng'] = $idiomaActual;
  23.             }
  24.         }
  25.         elseif(!isset($_COOKIE['apolo_leng']) && !isset($_GET['leng'])) {
  26.             if(file_exists($config->get('root')."/lenguajes/".$_SESSION['leng'].".php")) {
  27.             $idiomaActual = $_SESSION['leng'];
  28.             setcookie ("apolo_leng", $idiomaActual,0,"",dirname(__FILE__),0);
  29.  
  30.             }
  31.         }
  32.  
  33.         // Incluimos el archivo del idioma seleccionado
  34.         // o el archivo por defecto si no se seleccionó
  35.         // idioma o si no se encuentra el archivo
  36.         include $config->get('root')."/lenguajes/".$idiomaActual.".php";
  37.         }

cuando se entra por primera vez al sitio va a http://xxx/ y me muestra las 3 banderas. El problema esta que por ejemplo entro a la versión en frances y la cookie me guarda el valor "fr", pero si vuelvo a http://xxx/ se queda ahí como si no existiera la cookie, hago un print_r($_COOKIE) y lo unico que sale es:
Código:
Array
(
    [PHPSESSID] => 388de2710adb342ab4899998f64962b0
)
el codigo de la pagina de las banderas es:
Código PHP:
Ver original
  1. class indexController extends Controller {
  2.     public function index(){
  3.         if(isset($_COOKIE['apolo_leng'])){
  4.         $this->Utilidades->redirect($_COOKIE['apolo_leng'].'/inicio.php');
  5.         }
  6.         else{
  7.         $this->Vistas->show('index.html',$data);
  8.         }  
  9.     }  
  10. }
  11. ?>

ya estoy loco porque no se como solucionarlo, si alguien me puede dar una mano estaré eternamente agradecido.....
  #2 (permalink)  
Antiguo 23/06/2010, 00:06
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: sitio multilenguaje y cookie

Bueno lo que estoy notando es que cuando usas setcookie le estás indicando en el tercer parametro que cuando cierre el navegador elimine el cookie. Si quieres más tiempo debes indicarle una cantidad, no debes indicar 0. Pero mientras la persona está en la página sin cerrar el navegador los cookies deben permanecer. ¿Estás seguro que estás creando el cookie, o sea que si está entrando a la condición que la crea? Te recomiendo que hagas pruebas intentando ver que pasa cuando se cumple alguna condición, es decir usa echo o lo que sea e imprime en pantalla donde se encuentra al momento.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 23/06/2010, 10:19
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: sitio multilenguaje y cookie

solucionado, era varias cosas jeje, entre ellas como tu indicabas abimaelrc, al poner "0" solo lo tomaba como session, ahora lo puse que para dure 5 años jejeje.

Etiquetas: cookie, multilenguaje
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 21:11.