Listar elementos en un dropDownList

Tengo una tabla en mi DB "Material" el cual tiene tres atributos:

  • id

  • materia <- ejemplo: Bases de Datos

  • tipo <- ejemplo: libro

Quiero crear un dropDownList que genere algo parecido a esto:




    <?php echo CHtml::dropDownList('Cars', 'car_id', array(

        'Mazda'=>array(

            'mazda-rx7'=>'RX7',

            'mazda-rx5'=>'RX5',

        ),

        'Volvo'=>array(

            'volvo-b9tl'=>'B9TL',

            'volvo-l90e-radlader'=>'L90E Radlader',

        ),

    )); ?>



y que quede como:

Materia 1

-----Tipo 1

-----Tipo 2

-----…

Materia n

-----Tipo 1

-----Tipo 2

-----…

Intenté con algo como:


	

		<?php echo CHtml::dropDownList('Material', 'idMaterial', 

			array(

				CHtml::listData(Material::model()->findAll(),'id', 'tipo')

				)

		); ?>

	

pero no devuelve lo que necesito.

Alguna idea?

Gracias

Ya te faltaba poco por resolverlo… para agrupar solamente deberias escribir como ultimo parametro en el listData el nombre del campo que agruparas… por ej…


// y materia_id seria el criterio que se utilizaria para agrupar los elementos

echo CHtml::dropDownList('Material', 'idMaterial', 

   CHtml::listData(Material::model()->findAll(),'id', 'tipo', 'materia_id')

);

suerte…

Gracias Jack!!!

Igualmente me daba error, miré un código que tenía de otro formulario y vi que usaba activeDropDownList y no dropDownList. Qué diferencia hay entre estos???

Por si alguien lo necesita:




echo CHtml::activeDropDownList($model, 'idMaterial', 

			   CHtml::listData(Material::model()->findAll(),'id', 'tipo', 'materia')); ?>

Qué opciones tengo para poder listar los materiales agrupados de esa forma que NO estén prestados, es decir cuyo id NO se encuentre en otra tabla de la DB (tabla ‘prestamo’)? ???

Bien, básicamente la diferencia es que los activeComponents generan el contenido a partir de un modelo enviado como parámetro, los otros no lo hacen.

Ahora no comprendí tu ultima pregunta… sobre agrupar los materiales no prestados ?? Aunque eso me suena mas a un filtro en la consulta sql…

Una Consulta,

yo necesito algo parecido.

Pero en el "Group" del Compo veo el contenido de campo "materia_id", pero yo necesitaria la descripcion de esa FK que esta en otra tabla.

Lo voy a seguir intentando.

Si alguien me puede tirar algo de luz , sobre que estoy haciendo mal.

Saludos

Nicolas

Esto no guarda bien los datos, ya lo volveré a revisar con tiempo.

Hola como estan, lo que yo quiero hacer es algo sencillo listar 2 opciones admin o usuario y el valor seleccionado guardarlo en la base de datos, para ello tengo el siguiente codigo:

<?php echo $form->labelEx($model,‘rol’);?>

<?php echo $form->dropDownList($model,‘rol’, array(‘0’=>‘Usuario’,‘1’=>‘Administrador’));?>

<?php echo $form->error($model,‘rol’); ?>

donde rol es el atributo en tabla y no se porq no me guarda el valor :( de verdad en la logica es sencillo pero al aplicarlo no me sale

ve al modelo y en rules añade la regla:




  array('rol', 'in', 'range' =>array(0,1)),



con $model->attributes=$_POST[‘Modelo’]; solo pasan los atributos que sean seguros (si tienen alguna regla se consideran seguros)