checkbox

Hola…

Tengo un campo en mi base de que se llama complementos… en este campo se deben agregar estos campos…

Campo1, Campo2, Campo3, Campo4, Campo5, Campo6 pero el usuario los debe de escoger el… en algunos casos podrán ser todos en otros solo uno…

Que podría hacer ¿?

Si alguien me puede ayudar se lo agradecería mucho

Hola lula02

yo pondría una tabla nueva y la relacionaría con la actual

la otra opción es que guardes una cadena de caracteres en el campo

mira este post

http://www.yiiframework.com/forum/index.php?/topic/5160-how-to-implement-select-multiple-listbox/

Hola lula, te recomienda que analices la instrucción "listData" si es que lo deseas utilizarla de esa manera y con esa misma lo podrás crear ese resultado como lo deseas, solo es indicar tu checkbox, luego indicar el arreglo de donde tomaras los datos y generes un ciclo dentro de controller en el actionCreate y update el ciclo es para que obtengan los valores y los insertes o actualices las veces que lo desees

De la manera que te pondre de ejemplo no es con listData pero al igual la necesitas de esa manera de este ejemplo puedes desarrollador tu módulo, cabe mencionar que para esto tengo tres tablas una donde guardo los datos del módulo correspondiente, otra tabla de donde genero los checkbox dinámicos osea si en la tabla Requisito en mi caso es la principal y tengo otra tabla que se llama etapa y otra donde hago la relación de los dos etapa_requisito, si indico un registro en etapa, este se mostrará como check en requisito, si vuelvo a meter otro registro en etapa, ahora en vez de mostrar un check box mostrare dos para que el usuario los pueda seleccionar, espero me haya dado a entender con esto y en otra tabla almacenas los datos al mismo tiempo de estas dos tablas nombrada etapa_requisito, sino deja te pongo un ejemplo:




tabla Requisito //Toma en cuenta que me faltan mas campos por indicar pero con estos es mas que suficiente para tu ejemplo.

id_requisito, nombre_requisito, descripcion, usuario_alta, fecha_alta






tabla etapa

id_etapa, nombre_etapa, usuario_alta, fecha






tabla etapa_requisito

id_requisito, id_etapa, usuario_alta, fecha



Nota que hago una relación de estas tres tablas asi te darás una idea mejor y el código es el siguiente:




echo CHtml::checkBoxList(

					'Requisito[etapa]',

					$checkEtapa,

					$etapasRequisito,

			    	array('template' => '<li class="checkLDoc">{label}</li><li class="checkIDoc">{input}</li>',

			        'separator' => '',	

			       // 'checkAll'=>'Seleccionar todos',

			   		)

			    );



$checkEtapa, $etapasRequisito, son dos variables que extraigo de mi archivo de controller, dentro de ese archivo indico:




//Aquí nota que obtengo los valores de etapa.

$model->attributes=$_POST['Requisito'];

			if(isset($_POST['Requisito']['etapa']))

				$etapaSeleccion = $_POST['Requisito']['etapa'];

//Genero una transaccion para que si existe un error en etapa no me guarde no haga nada y lo regrece como si no hubiera pasado nada

$this->_db = Yii::app()->db;

			$txn = $this->_db->beginTransaction();

//genero un try para el manejo de errores

		try{	

				if($model->save()){

					

					if(isset($etapaSeleccion))

						foreach($etapaSeleccion as $idEtapa)

						 	$this->actionCreateEtapaRequisito($model->id_requisito, $idEtapa, 1);

				$txn->commit();

				Yii::app()->clientScript->registerScript(1, 'alert("Registro almacenado correctamente")');

				echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=index.php?r=requisito/view&id=".$model->id_requisito."\">";

				}

							

			}

//Si te fijas envio un mensaje hardcodeado de javascript he indico un meta para que me regrece a tal página.

catch (CDbException $e){

				$txn->rollback();

				$model = new Requisito('search');

				$this->render('admin',array(

				'model'=>$model,

				));

			}

//Todo esto va dentro del primer if donde se indica el post del modelo. Acabando esa llave se genera esto

		$etapasRequisito = array();

		$checkEtapa = array();

		$etapasRequisito = CHtml::listData(Etapa::model()->findAll('activo=:activo', array(':activo'=>TRUE)),'id_etapa', 'nombre_etapa');

		$this->render('create',array(

			'model'=>$model,

			'etapasRequisito'	=> $etapasRequisito,

			'checkEtapa'		=> $checkEtapa,

		));

//envio las variables con render de etapa, y etapa requisito pero nota que hago referencia a un método este es el método.

public function actionCreateEtapaRequisito($idRequisito, $idEtapa, $valor, $fecha_alta = NULL, $usuario_alta = NULL)

    {

        $model = new EtapaRequisito();

        $model->id_requisito = $idRequisito;

        $model->id_etapa = $idEtapa;

        	$model->fecha_alta 	= new CDbExpression("date_trunc('SECOND', TIMESTAMP 'now')");

		$model->usuario_alta = Yii::app()->user->id;

        if($model->save()) 

            return true;

        else 

            return false;

    }

//y con esto podrás almacenar en la otra tabla.



Espero que te sirva de ayuda lula recuerda analizar con calma no te desesperes, porque en ocaciones nos bloqueamos o metimos código cochino… cuidate. Saludos…

P.D. no te vayas a desesperar si no funcionan varias cosas, por si se me fueron cosas que no iban ya que solo te puse el código con uno check tengo mas y mas controles, como ejemplo en el método actionCreateEtapaRequisito en el parámetro idEtapa yo tengo que cuando es 1 va a insertar cuando es 0 va a actualizar, le kite muchas cosas que no necesitabas por eso te explico esa parte si tu no lo acomodas con if’s kitalas, solo agarra lo que necesitas…

Hola Horacio… mil gracias por tu aporte…la verdad es que me quiero ahorrar la hecha de otra tabla ya que estos datos son son tan indispensables…la verdad es que mi tutor me dijo que seria mucho mejor sino tuvieran que digitar los datos… por creo que voy a tratar de usar la segunda opción…

Muchas gracias…

Hola shaolin… mil gracias por tu aporte…pero realmente es algo muy complejo…y yo apenas estoy empezando con esto de la programación y de Yii… pero por el momento lo voy volver a leer si logro entender como es la cosa lo tratare de poner en practica sino lo dejare en lista de espera…

Jajajaja muchas gracias por tu colaboración y tu aporte…