En ciertas ocasiones tenemos que lidiar con el tema de colocar una lista de checkboxes para hacer una seleccion especifica como es el caso de los dias de la semana para un calendario, para esta labor tenemos el comando CHtml::checkBoxList(), revisando un poco el funcionamiento de este temos los siguientes parametros:
CHtml::checkBoxList(name,value,array(data),array(htmlParams));
desglosando un poco tenemos los parametros: - name: el nombre del objeto, recuerden que este nombre es la base para el arreglo de objetos de tipo "name[]" el cual pueden llamar desde $_POST - value: es el valor seleccionado, pueden usarlo o dejarlo vacio - array(data): este arreglo contiene los datos que se van a mostrar de la forma index=>data donde index es el valor que pasa a "name[]" - array(htmlParams): este parametro contiene las opciones de la lista, permitiendo modificar algunas cosas como la plantilla ("template" en la lista de parametros) por ejemplo.
Para ilustrar un poco nuestro caso generaremos la lista de dias de la semana, al ejecutar el comando:
CHtml::checBoxList("weekdays","",array( "0"=>"Domingo", "1"=>"Lunes", "2"=>"Martes", "3"=>"Miercoles", "4"=>"Jueves", "5"=>"Viernes", "6"=>"Sabado", ))
el sistema genera una lista en vertical similar a esta:
La idea es que esta lista se pueda mostrar en forma de tabla, con unos encabezados usando th y los checkbox como filas, para esto vamos a realizar algunos pasos
$header=""; $body="";
$var=CHtml::checkBoxList("days","",array( "0"=>"Domingo", "1"=>"Lunes", "2"=>"Martes", "3"=>"Miercoles", "4"=>"Jueves", "5"=>"Viernes", "6"=>"Sabado", ),array( "template"=>"\$header.='<th>{label}</th>';\$body.='<td>{input}</td>;'", "separator" => "",// es necesario eliminar el separador //Estos parametros son opcionales "checkAll"=>"T", "style" => "width: 10px;", ));
Como puede ver en vez de enviar con un echo la construccion del checkBoxList, lo enviamos a una variable para evaluar el resultado
eval($var);
Con este paso se asegura que las variables definidas anteriomente sean rellenadas con la informacion de la lista
<table> <tr><?php echo $header</tr> <tr><?php echo $body</tr> </table>
Listo, la construccion deberia generar los valores de forma horizontal en vez de vertical. En sintesis este es todo el codigo:
$header = ""; $body = ""; $var = CHtml::checkBoxList("fieldoptions", "", array( "0" => "D", "1" => "L", "2" => "M", "3" => "M", "4" => "J", "5" => "V", "6" => "S", ), array("template" => "\$header.='<td>{label}</td>'; \$body.='<td>{input}</td>';", "separator" => "", "checkAll" => "T", "style" => "width: 10px;", )); eval($var);
<table> <tr><?php echo $header</tr> <tr><?php echo $body</tr> </table>
Y listo, de esta manera tiene una lista de checkboxes en forma de tabla y horizaontalmente, si quiere dividir la informacion en dos grupos podria en vez de usar una variable de texto reemplazarlo por arreglos para cargar de forma indovidual los resultados de cada checkbox y por ciclos ubicarlos donde desee y como desee.
Total 3 comments
when? Thanks in advance.
Ok, i'll do it
Please type this wiki in english ...
Leave a comment
Please login to leave your comment.