Cambiar hoja de estilos

oFF-sIDE

Hola, francamente no tengo ni idea de cómo describir mi problema en pocas palabras como para que quepa en el título, de modo que he decido este porque más o menos viene a ser el problema.

Os explico:

  • Tengo una web con 2 estilos, uno en blanco y otro en negro y como soy un aprendiz pues no he sabido mejor forma de hacerlo que con un GET, es decir http://www.miweb.com?estilo=blanco.
  • Tengo una galería ya hecha, una minishowcase en javascript y algo de ajax (creo). Ésta tiene varios themes a elegir desde un archivo settings.php
  • He modificado 2 de los temas que incorpora para que se adecúen a mis dos estilos.

Las llamadas al estilo las hago en todos los archivos php de la siguiente forma:

$estilo = $_GET['estilo'];
	if($estilo=='blanco')
		echo '<link href="../css/estilo2.css" rel="stylesheet" type="text/css" />';
	else
		echo '<link href="../css/estilo1.css" rel="stylesheet" type="text/css" />';

Ahora viene el problema, a la hora de llamar al theme de la galería desde el archivo galería.php (donde está todo el contenido y los divs) hace una llamada con "require" a un archivo "general.bootstrap.php"

## import init file
require_once("libraries/general.bootstrap.php");

y éste luego llama al archivo "general.init.php"

//// init parameters
require_once( LIBROOT . "general.init.php" );

y éste llama luego al archivo "settings.php"

/* theme assignment */
$selected_theme = $settings['use_theme'];

y en settings.php la orden es la siguiente:

$settings['use_theme'] = 'dark';

En todo ese camino siempre se usa php y yo esperaba con suerte que la variable $estilo pudiera conservarse hasta settings.php y una vez allí, hacer un if y poder hacer algo así:

if($estilo=='blanco') $settings['use_theme'] = 'blue';
else $settings['use_theme'] = 'dark';

El caso es que no ha funcionado, ha cargado algunos elementos de la galería, que se llaman desde "galeria.php", pero nada más.

¿Sabeis alguna forma de hacerlo funcionar? Llevo un par de dias dándole vueltas y no saco la solución. Sé que es un problema bastante jodido porque no teneis delante todos los archivos que interactúan, pero weno, bienvenida sea toda la ayuda.

Gracias!

B

Suponiendo que tu código funcione..

Declara la variable estilo como de session para que en cualquier momento puedas tener acceso a ella.

Sorry por el ninaj edit.

oFF-sIDE

Cuando usa la variable $settings['xxxx'] no se está refiriendo al archivo settings.php? es que no he encontrado NINGUNA referencia en todos los documentos al archivo settings :/

Lo del $... pues no sé, ese archivo no lo he hecho yo y funciona correctamente, así que mejor no lo toco xD

EDIT: Acabo de encontrarlo, en general.bootstrap.php:

//// configuration file
require_once(dirname(dirname(__FILE__))."/config/settings.php");

umbranoide, cómo creo la variable como sesion?

suaveSHOW

Y porque no usas cookies.
Para ponerlo en blanco por ejemplo, haces un href destinado a settings.php?act=style&color=blanco o negro para el otro caso.
Y en ese archivo pones:

if($_GET['act']=='style')
{
$color=$_GET['color']
$expira=time()+60*60*24*30;
setcookie("webstyle", $color, $expira);
}

Y luego en el index donde llamas a la hoja de estilos pones:
estilos_<? echo $http_cookie_vars['webstyle']; ?>.css

Y tendrías que llamar estilos_blanco.css o estilos_negro.css
Yo así lo veo que funciona y más que sencillo.

B

http://es2.php.net/session

session_start();

$_SESSION["estilo"]="negro'";

oFF-sIDE

Es que la llamada a settings.php es un require y no me deja pasar nada por get. Ya lo había intentado del mismo modo que usaba el ?estilo=blanco en la dirección de la web.

Como decía umbranoide he pensado en las variables global (qué subnormal soy por no haberlo pensado antes), ahora mismo estoy googleando a ver cómo se declaran, porque poniendo en settings.php:

global $estilo;

Consigo que funcione, pero no ejecuta el IF correctamente (supongo que porque la variable no contiene nada).

oFF-sIDE

Me estoy perdiendo un poco.

Veamos, yo pongo en galeria.php lo siguiente:

session_start();
$_SESSION["estilo"] = 'negro';
$estilo = $_GET['estilo'];

Y en settings.php:

if($estilo=='blanco') $settings['use_theme'] = 'blue';
else $settings['use_theme'] = 'dark';

Esto por supuesto no funciona, así que he probado lo siguiente googleando:

$estilo = $_GET['estilo'];
session_register("estilo");

Pero tampoco funciona :/

B

No, es:

$SESSION["estilo"] = $GET['estilo'];

y para leer el valor if( $_SESSION["estilo"] == ...

oFF-sIDE

Tambien lo he probado, pero me da este fallo:

Notice: Undefined variable: _SESSION in C:\...\galeria\config\settings.php on line 104

Me estoy volviendo algo tarumba, nunca he trabajado con SESSION.

EDIT: He probado a hacer un session_start() tanto en galeria.php como en settings.php pero me da el siguiente fallo:

Notice: A session had already been started - ignoring session_start() in C:\...\galeria\galeria.php on line 85

Ahora funciona, pero me da ese fallo.

oFF-sIDE

Incompresible, ahora de pronto ya funciona, igual es que necesitaba un ctrl+F5 en lugar de un simple refresh.

Muchas gracias umbranoide, de verdad, creo que me voy a meter en el mundo de session y así me evito tener que pasar por url el estilo :)

Dod-Evers

POST weeeno GET maaalo

Supongo que lo querrás sacar de la información del usuario y cosas así no? Pos hale, todo a sesión xD

erdanblo

#11 ¿por qué?

Yo tengo entendido que los dos son igual de... ¿vulnerables?

oFF-sIDE

#11 ¿Post para pasar un simple parámetro? Yo el post sólo lo uso para formularios, para representaciones de la web uso get, igual que media-vida tambien usa get (ahora mismo veo ahí arriba un "fid" y un "tid".
Respecto a los usuarios y sesiones, esta versión de la web no tiene usuarios, en la siguiente ya me pondré a aprender cómo funciona el tema de usuarios. La verdad es que me apetece mucho :)

Dod-Evers

Hombre, al menos que no se vean en la url xD
Claro que con PHP acabas recurriendo porque son más sencillos... xD

Shock

Creo que las cookies es la solución que buscas, seteas la cookie en el usuario cuando elija su estilo y luego la puedes leer desde donde quieras sin problemas.

Sino siempre puedes declarar una variable como global y la puedes leer desde cualquier sitio o fichero, siempre que esté cargado en memoria claro.

bLaKnI

Coñe hay muchas maneras de hacerlo.

Cookie, para facil.
Session, pero la proxima vez que venga, deberá reconfigurarlo.
DB, guardas un valor de configuración en una tabla Usuario-Config.

etc...

Shock

Maneras hay mil, sip

Usuarios habituales