Variable de sesión: Seleccción de Columnas

Saludos.

El motivo de la presente es para que ayuden en lo siguiente:

Estoy implementando un grid.CGridView para una tabla cuya información debe ser traida con base en las columnas que seleccione el usuario mediante checkbox.

Es decir, si mi tabla tiene 8 columnas, entonces se muestran 8 checkbox, y el usuario selecciona 5 columnas, y luego pulsa el submit para que el CGridView se refresque y muestre las columnas seleccionadas.

El detalle es que las columnas seleccionadas las estoy almacenando en variables de sesión, mediante una función privada que la estoy llamando en el admin de mi controller (en donde está mi tabla):

Hay que aclarar que hay un array de checkboxes con los nombres de las columnas de la tabla ($_POST[‘columnas’]).

private function fijarColumnasAdmin()


{


	/* COMPROBAMOS QUE LA SESIÓN DE CAMPOS EXISTA PARA QUE LA TABLA SE REFRESQUE */  


	if(!isset(Yii::app()->session['adminMoviles'])){


		Yii::app()->session['adminMoviles'] = array("nombre");


		


	}


	else


	{


    	if(isset($_POST['columnas'])){


			Yii::app()->session['adminMoviles'] = $_POST['columnas'];


    	}


    	elseif(empty($_POST['columnas'])){


    		//Yii::app()->session['adminMoviles'] = array();


    	}


	}    	


}

Y tengo un doble lío:

  • En la línea que tengo comentada, si la comento: me conserva las columnas que selecciono, inclusive cuando avanzo en el paginador de mi tabla y/o cambio de página en mi aplicación web, pero tengo el inconveniente de que si no selecciono ninguna columna, entonces no me muestra mi tabla vacía, sino que me sale las últimas columnas que seleccioné.

  • Y si la descomento: entonces cuando refresco la tabla luego de seleccionar algunas columnas, entonces cuando avanzo en el paginador y/o me muevo en diferentes partes de la aplicación y regreso al tabla/admin, se pierden esas columnas que seleccioné.

Mi pregunta es:

¿Qué podría hacer para garantizar que no se me pierdan mis columnas seleccionadas, así seleccione algunas o no seleccione ninguna, cuando yo avance en el paginador de mi tabla y/o me mueva en mi aplicación por diferentes links y luego regrese a tabla/admin?

Les agradezco su atención.

Pues obvio que pase, haces un IF para saber si el POST existe, despues si no existe el POST compruebas que el POST no este vacio, pero si el POST no existe obvio que va a ser vacio, es un error de logica. La comprobación de si el POST es vacio o no solo lo debes hacer cuando existe, y cuando no existe compruebas que exista la SESSION y si no existe la SESSION lo creas con un array vacio.


private function fijarColumnasAdmin()

{

    /* COMPROBAMOS QUE LA SESIÓN DE CAMPOS EXISTA PARA QUE LA TABLA SE REFRESQUE */

    if(!isset(Yii::app()->session['adminMoviles'])){

        Yii::app()->session['adminMoviles'] = array("nombre");

    }

    else

    {

        if(isset($_POST['columnas'])){            

            if(empty($_POST['columnas'])){

                Yii::app()->session['adminMoviles'] = array();

            }else{

                Yii::app()->session['adminMoviles'] = $_POST['columnas'];

            }

        }elseif(!isset(Yii::app()->session['adminMoviles'])){

            Yii::app()->session['adminMoviles'] = array();

        }        

    }

}