[Solucionado] Guardar El Estilo Del Usuario En La Base De Datos

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?

Hola Miguel.

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’)

Saludos

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:




'components'=>array(

        'user'=>array(

                // enable cookie-based authentication

                'allowAutoLogin'=>true,

                'class' => 'WebUser',

        ),



Y luego configuramos el main.php del layouts ya sea el por defecto o si usamos un tema modificamos el del tema y debe parecido a algo como esto:




<!DOCTYPE html>

<html lang=<?php echo Yii::app()->language;?>>

  <head>

    <meta charset="utf-8">

    <title><?php echo CHtml::encode($this->pageTitle); ?></title>

    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo Yii::app()->charset;?>" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta name="description" content="Free yii themes, free web application theme">

    <meta name="author" content="Webapplicationthemes.com">

	<link href='http://fonts.googleapis.com/css?family=Carrois+Gothic' rel='stylesheet' type='text/css'>


    <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->

    <!--[if lt IE 9]>

      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>

    <![endif]-->

	<?php

		$baseUrl = Yii::app()->theme->baseUrl; 

		Yii::app()->clientScript->registerCoreScript('jquery');

		$cs = Yii::app()->getClientScript();

		$cs->registerScriptFile($baseUrl.'/js/bootstrap.min.js');

		$cs->registerScriptFile($baseUrl.'/js/styleswitcher.js');

		$cs->registerCssFile($baseUrl.'/css/bootstrap.min.css');

		$cs->registerCssFile($baseUrl.'/css/bootstrap-responsive.min.css');

		$cs->registerCssFile($baseUrl.'/css/abound.css');

	?>

    

    <!-- Fav and Touch and touch icons -->

    <link rel="shortcut icon" href="<?php echo $baseUrl;?>/img/icons/favicon.ico">

    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?php echo $baseUrl;?>/img/icons/apple-touch-icon-144-precomposed.png">

    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="<?php echo $baseUrl;?>/img/icons/apple-touch-icon-72-precomposed.png">

    <link rel="apple-touch-icon-precomposed" href="<?php echo $baseUrl;?>/img/icons/apple-touch-icon-57-precomposed.png">

      <!-- styles for style switcher -->

	<?php if (Yii::app()->user->getEstilo() == 1) {?>

		<link rel="stylesheet" type="text/css" href="<?php echo $baseUrl;?>/css/style-red.css" />

	<?php } ?>

	<?php if (Yii::app()->user->getEstilo() == 2) {?>

		<link rel="stylesheet" type="text/css" href="<?php echo $baseUrl;?>/css/style-brown.css" />

	<?php } ?>

	<?php if (Yii::app()->user->getEstilo() == 3) {?>

		<link rel="stylesheet" type="text/css" href="<?php echo $baseUrl;?>/css/style-green.css" />

	<?php } ?>

	<?php if (Yii::app()->user->getEstilo() == 4) {?>

		<link rel="stylesheet" type="text/css" href="<?php echo $baseUrl;?>/css/style-grey.css" />

	<?php } ?>

	<?php if (Yii::app()->user->getEstilo() == 5) {?>

		<link rel="stylesheet" type="text/css" href="<?php echo $baseUrl;?>/css/style-orange.css" />

	<?php } ?>

	<?php if (Yii::app()->user->getEstilo() == 6) {?>

		<link rel="stylesheet" type="text/css" href="<?php echo $baseUrl;?>/css/style-purple.css" />

	<?php } ?>

	<?php if (Yii::app()->user->getEstilo() == 7) {?>

      	<link rel="stylesheet" type="text/css" href="<?php echo $baseUrl;?>/css/style-blue.css" />

	<?php } ?>

    <?php if (Yii::app()->user->getEstilo() == 0) {?>

      	<link rel="stylesheet" type="text/css" href="<?php echo $baseUrl;?>/css/style-red.css" />

	<?php } ?>


  </head>


<body>


<section id="navigation-main">   

<!-- Require the navigation -->

<?php require_once('tpl_navigation.php')?>

</section><!-- /#navigation-main -->

    

<section class="main-body">

    <div class="container-fluid">

            <!-- Include content pages -->

            <?php echo $content; ?>

    </div>

</section>


  </body>

</html>