Tengo una base de datos para usuario con la siguiente estructura:
id - INT(100) AutoIncrement
username - VARCHAR(255)
password - VARCHAR(40)
tipo_usuarios_id - INT(11)
y tengo un theme en Yii el cual tiene varias hojas css de estilo que lo cambio a través de una function js presionando el botón del color que quiero que tome
imagen
como hago para que en vez de ser así yo cree un form para los usuarios donde el usuario seleccione el color que quiere y siempre que inicie sesión le aparecerá ese color al menos que vuelva a cambiarlo. Tengo claro como guardar el dato en la base de datos, tengo claro como hacer el formulario para el usuario, lo que no tengo claro es como hago para que cuando inicie sesión cambie el css en el theme?
Hay una función llamada "beforeAction" que le puede ayudar en eso.
Cree un controlador común para todos los controladores de la aplicación y en ese controlador define la función beforeAction desde donde asignará el theme necesitado. De paso, no estaría de más echarle un vistazo a los themes de Yii (Yii::app()->theme = ‘miTema’)
Otra alternativa, que podría ser más rápida para su caso puntual, sería agregar en el archivo layouts/main.php el script que carga un tema específico desde JS.
El problema del script seria que si no me gusta el color principal que es el obligatorio en este caso rojo y quiero poner un azul o un gris debo cambiar el color cada vez que entro al sistema
He logrado solucionar el problema que tenia para hacerlo de la siguiente manera, agrego el campo estilo a la tabla usuarios, quedando la tabla de la siguiente manera:
id - INT(100) AutoIncrement
username - VARCHAR(255)
password - VARCHAR(40)
tipo_usuarios_id - INT(11)
estilo - INT(1)
Ahora debemos crear un componente llamado WebUser.php el cual tiene una función llamada getEstilo el cual me trae el valor de estilo del usuario actual, el componente debe verse mas o menos asi así:
<?php
class WebUser extends CWebUser
{
// Store model to not repeat query.
private $_model;
// Return first name.
// accesdemos al Cus
protected function loadUser($usuario_id=null)
{
if($this->_model===null)
{
if($usuario_id!==null)
$this->_model = Usuarios::model()->findByPk($usuario_id);
}
return $this->_model;
}
function getEstilo()
{
if (Yii::app()->user->id != 0){
$user = $this->loadUser(Yii::app()->user->id);
$u = $user->estilo;
return $u;
}
else
{
$u =0;
return $u;
}
}
}
?>
Al hacer esto debemos incluir la siguiente linea en el components del config/main y deberia quedar algo asi: