checkBoxList valores

No controller:


$teclados = Teclado::model()->findAll();

            $tecladosA = array();

            foreach ($teclados as $value) {

                $tecladosA[]=$value->brand."-".$value->model;

            }

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

                     'model'=>$this->loadModel($id),

                     'teclados'=>$tecladosA,

                ));

view:


echo CHtml::checkBoxList('Teclados','Teclados',$teclados,

            array(

              'class'=>'RitmoTeclado_TecladoName',

        ));

Como posso pôr o id do modelo como value na checkboxlist para depois mandar por ajax?

zipzap,

Faz assim:




$teclados = Teclado::model()->findAll();

            

foreach ($teclados as $value) {

	$tecladosA[$value->id]=$value->brand."-".$value->model;

}


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

	 'model'=>$this->loadModel($id),

	 'teclados'=>$tecladosA,

));



Assim você coloca o ID dentro array, assim o checkboxlist atribute este valor ao value do <option>

Ai depois para usar em ajax você pode fazer usando jQuery:




$('input#Teclados').live('click', function(){

alert($(this).val());

});



Ai você faz o teste ae.

ok funciona mas agora como posso retornar na checkBoxList os valores que tenho na base de dados?

Eu tenho assim mas não funciona:




$tecladosSQL = RitmoTeclado::model()->findAllBySql("select teclado.idteclado from teclado inner join ritmo_teclado on (teclado.idteclado=ritmo_teclado.idteclado) where ritmo_teclado.idritmo =".$model->idritmo);

                

                

    echo CHtml::checkBoxList('Teclados',$tecladosSQL->idteclado,$teclados,

            array(

              'class'=>'RitmoTeclado_TecladoName',

      ));

Você tem que colocar o resultado do seu Model em um array, senão o checkBoxList não vai reconhecer o que é valor ou texto.

Faz assim:




$tecladosSQL = RitmoTeclado::model()->findAllBySql("select teclado.idteclado from teclado inner join ritmo_teclado on (teclado.idteclado=ritmo_teclado.idteclado) where ritmo_teclado.idritmo =".$model->idritmo);

$list = CHtml::listData($tecladosSQL, 'idteclado', 'titulo');


echo CHtml::checkBoxList('Teclados',$tecladosSQL->idteclado,$list,

            array(

              'class'=>'RitmoTeclado_TecladoName',

      ));




Não percebi muito bem o teu código.Tens skype ou messemger?

Qual é a dúvida?

Com


$list = CHtml::listData($tecladosSQL, 'idteclado', 'titulo');



não estou a devolver estes campos desta forma brand."-".model;

Cria no seu model(RitmoTeclado) a seguinte função:


public getTitulo(){

return $this->brand . '-' . $this->model;

}

Não tem como você concatenar texto diretamente no listData(), ele só aceita se existir uma função que faça isso.

Qualquer coisa não bate certo.Eu tenho agora:


$tecladosSQL = Teclado::model()->findAllBySql("select teclado.idteclado from teclado inner join ritmo_teclado on (teclado.idteclado=ritmo_teclado.idteclado) where ritmo_teclado.idritmo =".$model->idritmo);

       $list = CHtml::listData($tecladosSQL, 'idteclado', 'TecladoName');         

                

    echo CHtml::checkBoxList('Teclados',$tecladosSQL,$list,

            array(

              'class'=>'RitmoTeclado_TecladoName',

      ));

Criei o metodo na classe Teclado:


public function getTecladoName(){

            

            return $this->brand.'-'.$this->model;

        }

E tenho este erro:

Object of class Teclado could not be converted to int