Foros del Web » Programando para Internet » PHP »

Url amigable para pagina php multi-idioma

Estas en el tema de Url amigable para pagina php multi-idioma en el foro de PHP en Foros del Web. Hola de nuevo. Llevo ya un par de días dándole vueltas al tema, googleando y probando cosas varias, pero no consigo el resultado que quiero. ...
  #1 (permalink)  
Antiguo 05/02/2012, 17:39
Avatar de jpa
jpa
 
Fecha de Ingreso: diciembre-2011
Ubicación: A Coruña
Mensajes: 10
Antigüedad: 12 años, 4 meses
Puntos: 2
Url amigable para pagina php multi-idioma

Hola de nuevo.

Llevo ya un par de días dándole vueltas al tema, googleando y probando cosas varias, pero no consigo el resultado que quiero.

Se trata de otra consulta sobre una página multi-idioma en php. (Curiosamente por [URL="http://www.forosdelweb.com/f64/web-varios-idiomas-con-misma-url-distinta-952107/#post4018027"]aquí[/URL] se ha comentado estos días algo parecido,que no lo mismo).

Lo que quiero es conseguir direcciones amigables tipo
http://www.midominio.com/es/producto-producto1
en vez de
http://www.midominio.com/index.php?content=productos/producto1.php?lang=es
o
http://www.midominio.com/es/
en vez de
http://www.midominio.com/index.php?lang=es

A continuación os explico un poco como está estructurada la página ahora mismo.

La página tiene un index php que carga la estructura de la página (cabecera, menú horizontal, pie...) constante y un 'cuerpo de la página en el que se incluyen distintos ficheros php dependiendo de la sección que se escoge.

Ahora estoy tratando de implementar las URLs amigables en un servidor Apache, es decir, mediante Urlrewrites. Hasta donde os he contado no hay problema. Lo haría así en el .htaccess:

Código:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^productos-([a-z]*)$ index.php?content=productos/$1\.php
Y cambio los enlaces del menú tipo

<a href="index.php?content=producto1.php">

por

<a href="productos-producto1">

La url me quedará http://www.misitio.com/productos-producto1

La vida sería muy fácil si todos hablásemos el mismo idioma (salvo para los traductores), pero no es así.

La cosa se complica porque en la cabecera se incluyen dos enlaces para los idiomas disponibles, que hasta ahora son "es" (para castellano) y "gal" (en gallego).

Estos enlaces llaman a una función que añade las variables de idioma.

Código PHP:
<a href="<?php echo add_or_change_parameter("lang""es"); ?>">es</a>
Esta función, que tome prestada de John Galt en http://www.php.net/manual/es/reserved.variables.request.php (las referencias de autor son importantes ;) ) la he incluido entre las etiquetas <head> como sigue:

Código PHP:
function add_or_change_parameter($parameter$value
 { 
  
$params = array(); 
  
$output "?"
  
$firstRun true
  foreach(
$_GET as $key=>$val
  { 
   if(
$key != $parameter
   { 
    if(!
$firstRun
    { 
     
$output .= "&"
    } 
    else 
    { 
     
$firstRun false
    } 
    
$output .= $key."=".urldecode($val); 
   } 
  } 
  if(!
$firstRun
   
$output .= "&"
  
$output .= $parameter."=".urldecode($value); 
  return 
htmlentities($output); 
 } 
?> 
Así consigo que me añada a la url ?lang=es (o gal) o &lang=es (o gal) según corresponda.

Defino la variable de sesión del idioma en un fichero "core.php" que incluyo en el index.php antes de la etiqueta <html> de la siguiente forma:

Código PHP:
<?php  
    session_start
();  


    if(!isset(
$_SESSION['idioma']) || !empty($_GET['lang']))
    {  
        if(empty(
$lang))
        {  
            
$lang="es";
$lang = isset($_GET['lang']) ? $_GET['lang'] : "es";
        }  
        
$_SESSION['idioma']=$lang;  
    }  
    switch (
$_SESSION['idioma']) {  
    case 
$_SESSION['idioma']: require("lang/".$_SESSION['idioma']."/".$_SESSION['idioma'].".php"); break; }  
?>
Supongo que en lo que me debo de centrar para conseguir el resultado es que cuando se pulse en el enlace de la cabecera se genere un enlace a http://www.misitio.com/es/-la-dirección-actual
pero no sé como llamar a la variable %_SESSION['idioma'] y construir un enlace con ella a la página actual.

Etiquetas: multi-idioma, url-amigables
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 08:10.