Hola buenas tardes. Llevo algún tiempo aprendiendo a trabajar en php, y, despues de presentarse un problema expuesto y resuelto en http://miarroba.com/foros/ver.php?foroid=152498&temaid=3353166&ultimomsg=si#ultimomsg. Aquí lo que se comenta es como crear una primera página de inicio a un sitio web que pregunte un idioma en el que acceder, y, guardar ese dato en una cookie que permita entrar siempre en la página en el idioma que se ha elegido, sin la necesidad de elegir siempre el idioma. Esto lo digo porque me parece que es muy útil de cara a la usabilidad de las páginas que creemos.
Más adelante, mientras esperaba respuesta, que he visto hace unos pocos minutos fisgoneando de nuevo por el foro, estuve trabajando sobre otros puntos del código que quería crear. Mis conocimientos de PHP son bastante... nefastos sería la palabra? No, quizá no tanto, pero aun me queda mucho por aprender (y ganas no faltan, vamos, cada Warning o Fatal Error son un nuevo mundo para seguir progresando, jejeje), y más trucos descubriré...
Bien, a lo que ibamos que me enrollo. Supongamos que un usuario está en su página en castellano, en una sección en concreto, no se, por ejemplo, la de contacto. Nosotros, con nuestra buena fe insertamos un sistema para poder cambiar de idiomas (en mi caso lo hice con imágenes de pequeñas banderitas de color). Cual es el problema? Que, o bien ponemos una dirección real, tipo href="../ingles/inicio.php", que sirva para todas las páginas del sitio, o bien para cada página situamos una "contradirección" correspondiente en el otro idioma, que es lo que me pasó a mi durante muchas horas hasta encontrar la solución. Bueno, despues de investigar sobre la funcion incorporada de basename() y la variable PHP_SELF encontré una interesante manera de capturar la dirección de la barra del navegador, insertarla en el href y mostrarla al público, para que si alguien quiere trasladarse de una sección en concreto en un idioma pueda trasladarse a la misma en otro idioma, sin necesidad de reescribir el código siempre. Ahí va tal cual está utilizándose en una de las páginas que administro:
<table border="0" cellspacing="2" cellpadding="2">
<tr>
<td>
<?
echo "<a href='../cata/".basename($PHP_SELF)."'>"
?>
<img src="../imatges/idioma/catap.gif" alt="Català" width="20" height="13" border="0"></a></td>
<td>
<?
echo "<a href='../cast/".basename($PHP_SELF)."'>"
?>
<img src="../imatges/idioma/castp.gif" alt="Castellano" width="20" height="13" border="0"></a></td>
</tr>
</table>
Si quereis acceder para probarlo entrar en Batubaroa.net, y mirad en la esquina superior derecha donde aparecen las dos banderitas, que podrían ser tres o cuatro o las que sean...
No obstante este sistema me da algunos problemas. En mi "afán" por aprender php y mejorar mis conocimientos tengo aquí al lado un libro, "Desarrollo Web con PHP y MySQL" (del que por cierto estoy bastante contento lo que me está haciendo aprender), donde aparacen bastantes "tiras" de código útil para hacer pruebas, copiar, modificar, etcétera etcétera. Bien, uno de estos plantea la creación de una clase que signifique la estructura básica de la página, con su cabecera, su barra de navegación, su espacio para el contenido, etc... todo en un cómodo archivo .inc (o.php, es lo de menos). Por otra parte tenemos el archivo .php que se utilizará, como index.php, en que llamamos al archivo estructura.inc y lo ejecutamos, insertando, en el espacio previsto el contenido, que más abajo se define en una variable. (como me enrollo no?) A la hora de implementar en este código esta función de idioma no hay manera de que me detecte el basename($PHP_SELF); y si pruebo con basename(__FILE__) lo que aparece en el vínculo es el nombre del archivo .inc. Si creo la variable para determinar el valor de PHP_SELF en index.php, literalmente, pasa de ella, y si la creo dentro de la clase me da error. Por otro lado, si defino la variable fuera de la clase pero dentro del archivo inc también pasa de ella. Vamos al código mejor?
Este sería un resúmen del archivo estructura.inc
***************INICIO DE estructura.inc**************************
<?
class pagina
{
// atributos de la clase pagina
var $contenido;
var $titulo = 'Nuestra Página';
var $keywords = 'meta-keywords, a gusto del personal';
var $menusup = array ('Quienes Somos' => 'quisom.php',
'Historia' => 'historia.php',
'Noticias' => 'noticies.php',
'Material' => 'material.php',
'Foro' => 'forum.php',
'Galeria' => 'galeria.php',
'Descargas' => 'descarregues.php',
'Contact0' => 'contacte.php',
'Mail <span class="Estilo2">(sólo miembros)</span>' => 'mail.php' );
// operaciones de la clase pagina
function SetContenido($nuevocontenido) {
$this->contenido = $nuevocontenido;
}
function SetTitulo($nuevotitulo) {
$this->titulo = $nuevotitulo;
}
function SetKeywords($nuevokeywords) {
$this->keywords = $nuevokeywords;
}
function SetMenuSup($nuevomenusup) {
$this->menusup = $nuevomenusup;
}
function Mostrar() {
echo "<html>\n<head>\n";
$this->MostrarKeywords();
$this->MostrarEstilo();
$this->MostrarTitulo();
echo "</head>\n\n<body>\n";
$this->MostrarHeader();
//$this->MostrarMenuSup(); //deshabilitadas para poder probar el código hasta el punto que da problemas.
echo $this->contenido;
//$this->MostrarFooter();
}
function MostrarKeywords() {
echo "<meta name=\"keywords\" content\"$this->keywords\">";
}
function MostrarEstilo() {
echo "<link href=\"../estilos.css\" rel=\"stylesheet\" type=\"text/css\">";
}
function MostrarTitulo() {
echo "<title>$this->titulo</title>";
}
function MostrarHeader() {
?>
<img src="logo.gif"> <!- en su defecto el inicio y cabecera de la página, estructura de tablas etcétera... -->
<!- Inicio del código en cuestión -->
<?
echo '<a href="../cata/'."basename($PHP_SELF)".'">'
?>
<img src="../imatges/idioma/catap.gif" alt="Català" width="20" height="13" border="0"></a>
<?
echo "<a href='../cast/".basename($PHP_SELF)."'>"
?>
<img src="../imatges/idioma/castp.gif" alt="Castellano" width="20" height="13" border="0"></a>
<!-- Final del código en cuestión -->
<?
}
}
?>
***************FINAL DE estructura.inc**************************
***************INICIO DE index.php******************************
<?
require('estructura.inc');
$paginabase = new Pagina();
$paginabase -> SetContenido('Cualquier texto de ejemplo es válido, aquí iria el contenido individual de cada página');
$paginabase -> Mostrar();
?>
****************FINAL DE index.php******************************
En una de las muchas pruebas que he hecho, por ejemplo, crear una función como la que define el contenido y vinculando la variable de idioma, por ejemplo $idioma, al index.php, de la misma forma que el contenido, he llegado a tener como muestra una cadena de 1 caracter, extraido de la variable $paginabase (no me pregunteis como porque no tengo ni idea), la primera letra del texto de la página, que en este caso sería 'C' ( "('Cualquier texto de ejemplo...')"...
La verdad es que ya no se que hacer con este código para conseguir que funcione de manera "fiable", por eso os pido ayuda a los que sabeis más. Espero algún dia poder colaborar con "truquillos" más interesantes que el que he podido aportar a vuestra colección. Muchas gracias por la paciencia de leer y responder, y perdón por si había una pregunta y respuesta similar que no he visto, porque la verdad es que he registrado medio foro entre idas y venidas...
Un abrazo a todos, hasta pronto!