Foros del Web » Programando para Internet » PHP »

[Ayuda] include() pasa el valor de las constantes pero no pasa variables.

Estas en el tema de [Ayuda] include() pasa el valor de las constantes pero no pasa variables. en el foro de PHP en Foros del Web. Hola gente, bueno les comento mi problema a ver si los capos se dan cuenta porque yo no logro saber que esta pasando. Estoy haciendo ...
  #1 (permalink)  
Antiguo 16/07/2010, 12:24
Avatar de sette15  
Fecha de Ingreso: noviembre-2007
Ubicación: Rosario, Argentina
Mensajes: 97
Antigüedad: 16 años, 5 meses
Puntos: 0
Exclamación [Ayuda] include() pasa el valor de las constantes pero no pasa variables.

Hola gente, bueno les comento mi problema a ver si los capos se dan cuenta porque yo no logro saber que esta pasando.
Estoy haciendo una web que va a ser multi idioma, por ende tengo una carpeta que se llama idiomas dentro de la cual están las carpetas con los distintos idiomas (es, en) y a su vez estas tienen dentro un archivo .php (lng_es.php, lng_en.php) que tiene contantes y variables para pasar a lo que sería la pagina principal.

La web está modularizada por ende tengo cabecera.php, cuerpo.php y pie.php. Lo que importa ahora es la cabecera. El código es el siguiente:

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="<?= $lng_cfg['codigo_iso']; ?>" xml:lang="<?= $lng_cfg['codigo_iso']; ?>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?= $lng_cfg['unicode']; ?>" />
<link rel="shortcut icon" href="<?= ICONO; ?>" />
<link href="estilos/general.css" rel="stylesheet" type="text/css" media="screen" />
<meta name="description" content="<?= DESCRIPCION; ?>" />
<meta name="keywords" content="<?= PALABRAS; ?>" />
<meta name="copyright" content="<?= COPY; ?>" />
<meta name="robots" content="index, nofollow" />
<title>
<?= TITULO; ?>
</title>
</head>
Bueno lo que esta con MAYÚSCULAS son las constantes y las otras son variables (obvio) que fueron definidas en el archivo .php del idioma correspondiente.
Ahora mi problema es que en el momento de incluir el archivo .php del idioma correspondiente mediante un sistema simple que hice que selecciona el idioma de forma automática las constantes se reemplazan como deberían y las variables no!...
La verdad no se que puede estar pasando, por favor si alguien sabe y me puede ayudar se lo agradecería mucho...

PD: Si necesitan más información no duden en preguntar.

Desde ya muchas gracias...
__________________
Salu2
  #2 (permalink)  
Antiguo 16/07/2010, 12:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: [Ayuda] include() pasa el valor de las constantes pero no pasa variables.

pues, si puedes mostrar un código donde defines las variables de lenguaje que mejor!!

otro detalle es el contexto donde cargas dichas variables, que al parecer no corresponde al contexto actual/global....

es por eso que las constantes se evalúan, pues su contexto es global... quizá ahí este la clave... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/07/2010, 12:51
Avatar de sette15  
Fecha de Ingreso: noviembre-2007
Ubicación: Rosario, Argentina
Mensajes: 97
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [Ayuda] include() pasa el valor de las constantes pero no pasa variables.

Gracias por responder, te muestro uno de los archivos, el lng_es.php:

Código:
// Configuración general.
$lng_cfg['nombre'] = 'Español';
$lng_cfg['codigo_iso'] = 'es';
$lng_cfg['unicode'] = 'utf-8';

// Fecha y Hora.
function mostrar_fecha(){
    $dia = array('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Sábado');
    $mes = array('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto',     'Septiembre', 'Octubre', 'Noviembre', 'Diciembre');
    $fecha = $dia[date('w')] . ' ' . date('j') . ' de ' . $mes[date('n')] . ' de ' . date('Y');
	return $fecha;
	unset($dia, $mes);
	}
	
function mostrar_hora(){
		$hora = 'a las ' . date('H:i:s');
		return $hora;
	}

// Textos sueltos.
define(DESCRIPCION, "aca va una descripcion");
define(PALABRAS, "aca van los meta tags");
define(INICIO, 'Inicio');
define(FAQ, 'FAQ');
define(CONTACTO, 'Contacto');
Bueno como se puede ver las variables de la cabecera son las primeras de todas, no creo que estén mal. Otra cosa que me falto aclarar, las constantes de la cabecera en verdad las que se cargan desde este archivo son DESCRIPCION Y PALABRAS, las otras como son generales se cargan desde una base de datos.
Pero más halla de eso, las otras constantes como INICIO, FAQ y CONTACTO que son del menú que también se encuentra en la cabecera (pasa que al código lo corte en </head> pero abajo sigue) se reemplazan correctamente. Y otra cosa mas, cuando hago un llamado de las funciones mostrar_fecha() y mostrar_hora() desde el index.php están se muestran correctamente al igual que las constantes, por lo que acá el problema son solamente las variables.

Este archivo lng_es.php no esta incluido directamente en la cabecera.php sino que pasa por otro archivo (idioma.cfg.php) que es el que se encarga de seleccionar cada idioma según el del navegador, esto lo hice con $_SERVER['HTTP_ACCEPT_LANGUAGE'] y un simple swhitch, así que ahí no creo que este el problema, por otro lado como ya te digo las constantes se cargan y las variables no, así que el archivo se está incluyendo correctamente.
__________________
Salu2
  #4 (permalink)  
Antiguo 16/07/2010, 13:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: [Ayuda] include() pasa el valor de las constantes pero no pasa variables.

Pero donde es donde incluyes el archivo de cabecera.php, ya que recuerda que las variables son locales al contexto donde las llames, pero las constantes no, estas son globales.

Saludos.
  #5 (permalink)  
Antiguo 16/07/2010, 13:30
Avatar de sette15  
Fecha de Ingreso: noviembre-2007
Ubicación: Rosario, Argentina
Mensajes: 97
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [Ayuda] include() pasa el valor de las constantes pero no pasa variables.

Mmm a ver, lo explico mejor:

Archivo de idioma: includes/idiomas/es/lng_es.php
Archivo de configuración de idioma: includes/idioma.cfg.php (que mediante un switch hace un include de lng_es.php)
Archivo cabecera: include/cabecera.php
El index.php se encuentra en el directorio raiz.

Entonces en el index.php hago esto: include('include/cabecera.php');
Dentro de cabecera.php hago esto: include('include/idioma.cfg.php');

No entiendo porque no funciona, supongo que tendría que funcionar :(
__________________
Salu2
  #6 (permalink)  
Antiguo 16/07/2010, 13: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: [Ayuda] include() pasa el valor de las constantes pero no pasa variables.

una hack para que funcione sería colocar la variable $lng_cfg en el contexto usando el operador global, claro... antes de definir sus valores... ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 16/07/2010, 13:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: [Ayuda] include() pasa el valor de las constantes pero no pasa variables.

Cita:
Iniciado por sette15 Ver Mensaje
[...] No entiendo porque no funciona, supongo que tendría que funcionar :(
mira, para que entiendas acerca del contexto de las variables necesitas leer el manual:
http://www.php.net/manual/en/languag...bles.scope.php

solo así veo posible de que entiendes lo que te aseguramos de antemano... suponer no basta, deberías estar seguro...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 16/07/2010, 13:38
Avatar de sette15  
Fecha de Ingreso: noviembre-2007
Ubicación: Rosario, Argentina
Mensajes: 97
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [Ayuda] include() pasa el valor de las constantes pero no pasa variables.

Cita:
Iniciado por pateketrueke Ver Mensaje
una hack para que funcione sería colocar la variable $lng_cfg en el contexto usando el operador global, claro... antes de definir sus valores... ;)
Amigo puse el global y funcionó correctamente, pero entonces el problema es que las variables son locales y por eso no las tomaba?... es decir lo que hice fue añadir en el lng_es.php esto:

global $lng_cfg

Y después todo el código como esta y funcionó.
Pero eso quiere decir que si o si voy a tener que hacer las variables globales?, si hay que hacerlo bueno pero si se puede evitar mejor ya que por ahí leí que ocupan más memoria que las variables locales.
__________________
Salu2
  #9 (permalink)  
Antiguo 16/07/2010, 13:40
Avatar de sette15  
Fecha de Ingreso: noviembre-2007
Ubicación: Rosario, Argentina
Mensajes: 97
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [Ayuda] include() pasa el valor de las constantes pero no pasa variables.

Cita:
Iniciado por pateketrueke Ver Mensaje
mira, para que entiendas acerca del contexto de las variables necesitas leer el manual:
http://www.php.net/manual/en/languag...bles.scope.php

solo así veo posible de que entiendes lo que te aseguramos de antemano... suponer no basta, deberías estar seguro...
Ahora me queda claro :p, perdón por el post entonces... Y muchas gracias a los dos
__________________
Salu2

Etiquetas: include, variables
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 23:11.