Ejemplo combo dependiente?

Hola agradecería si alguien tiene un ejemplo de como trabajar con combos dependientes.

Estuve guiandome del cookbook sobre dependent dropdown , pero no me funcionó, agradecería cualquier ayuda

Si subís el código de tu vista y tu acción para recarga ponelo acá y lo reviso.

Saludos,

Gracias x responder, aquí está:

Vista _form.php





<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'solicitud_cotizacion-form',

	'enableAjaxValidation'=>false,

)); ?>


<?php echo $form->errorSummary($model); ?>

 

<table>

<tr>

<td class="subtitulo"><img src="<?php echo Yii::app()->request->baseUrl; ?>/images/flecha_down.png" />Detalles</td>

<td>&nbsp;</td>

</tr>

<tr>

<td><?php echo $form->labelEx($model,'SCOT_Fecha'); ?></td>

<td>

<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(

    

    'name'=>'SCOT_Fecha',

    'attribute'=>'SCOT_Fecha',

    'model'=>$model,

    'language' => 'es',

    'themeUrl' => Yii::app()->baseUrl.'/css/cupertino' ,

    'theme'=>'pool',

    'cssFile'=>array('jquery-ui-1.8.7.custom.css'),

    'options'=>array(

        'showAnim'=>'slide',

        'dateFormat'=>'yy/mm/dd',

    ),

    'htmlOptions'=>array(

        'style'=>'height:18px;

                  enable:false',

        


    ),

));


?>

</td>

<td><?php echo $form->labelEx($model,'PRY_Id'); ?></td>

<td>

<?php 

echo $form->dropDownList

($model,'PRY_Id',

CHtml::listData(requerimiento::model()->findAll(),

'PRY_Id','proyecto.PRY_Descripcion'),

array(

'ajax' => array(

'type' => 'POST',

'url' => CController::createUrl('compras/cargar'),

'update' => '#REQ_Id',

//'data'=>'js:alert("prueba")',

)   

)

);


?>

</td>

</tr>




<tr>

<td>


<?php echo $form->dropDownList($model,'REQ_Id',array());?>

      


</td>

<td><?php //echo CHtml::submitButton('Grabar');?></td>

<td>




</td>

<td>

</td>

</tr>

</table>

<?php $this->endWidget();

?>




Y en el controlador:




   public function actionCargar()

    {

        echo CHtml::encode(print_r($_POST, true));

        $data = requerimiento::model()->findAll('PRY_Id=:parent_id',

                        array(':parent_id'=>(int) $_POST['PRY_Id']));

                        

        

 

        $data = CHtml::listData($data,'REQ_Id','REQ_id');

            foreach($data as $id => $value)

            {

                echo CHtml::tag('option',array('value' => $id),CHtml::encode($value),true);

            }

    }




Aún a la espera de alguna solución :huh:

Hola Luis,




$form->dropDownList

($model,'PRY_Id', //<---------- aqui has de poner el atributo del modelo a mostrar, asumo que esta bien

CHtml::listData(requerimiento::model()->findAll(), // <---- aqui buscas por requerimientos

'PRY_Id', // <---------------- aqui has de poner el atributo del modelo requerimiento que quieres de valor y que ha de seleccionar el combo

'proyecto.PRY_Descripcion' //<----- aqui has de poner el atributo del modelo requerimiento que quieres de texto en tu combo

),




Gracias Antonio, el primer dropdown me carga correctame los datos que necesito, el problema es que al seleccionar un elemento de ese dropdown, quiero que me cargue en otro dropdown los datos correspondientes al valor que selecciono, cosa que no esta ocurriendo :mellow:

Y cómo quieres que te los cargue? onselect y una llamada de ajax lo crea? onselect y una llamada a una función que lo haga con matrices?

Disculpa ya vi

Estoy chequeando tu código y no veo nada malo… puedes responder a:

a ) Has chequeado si hay o no envio ajax? (usa firebug para eso o chrome console)

b ) Has comprobado que no haya ningun error de javascript en la randerización de la view?

c ) Le has dado privilegios de acceso a esa accion?

Si le di privilegios, pero parece q no pasa x el controlador.

Pongo esto:




   public function actionCargar()

    {

       echo CHtml::encode(print_r($_POST, true));




y no imprime nada

Puedes decirme el nombre del controlador (completo) y las reglas de acceso enteras?

Yo cambiaría el CController::createUrl por $this->createUrl(’/compras/cargar’);

Saludos

Lo del controlador:




class ComprasController extends Controller

{

  ...

    public function actionCargar()

    {

        echo CHtml::encode(print_r($_POST, true));//imprimir si algo llega x post

        $data = requerimiento::model()->findAll('PRY_Id=:parent_id',

                        array(':parent_id'=>(int) $_POST['PRY_Id']));

                        

        $data = CHtml::listData($data,'REQ_Id','REQ_id');

            foreach($data as $id => $value)

            {

                echo CHtml::tag('option',array('value' => $id),CHtml::encode($value),true);

            }

    }

       

    public function accessRules()

    {

       return array(

	array('allow','actions'=>array('index','view','cargar'),users'=>array('*'),),

        );

    }

} 



Lo cambié pero sigue igual




<td><?php echo $form->labelEx($model,'PRY_Id'); ?></td>

<td>

<?php 

    echo $form->dropDownList($model,'PRY_Id',

                      CHtml::listData(requerimiento::model()->findAll(),

                             'PRY_Id','proyecto.PRY_Descripcion'),

                              array(

                                   'ajax' => array(

                                   'type' => 'POST',

                                   'url' => $this->createUrl('/compras/cargar'),

                                   'update' => '#REQ_Id',

                                        )   

                                     )

                                );


?>

</td>


<td>

<?php echo $form->dropDownList($model,'REQ_Id',array());?>    

</td>



Como randerizas el contenido? es renderPartial o render?

Puedes verificar el codigo que se escribe en el navegador? El javascript resultante…

Hola Antonio, el form lo llamo mediante un renderPartial hacia mi página de inicio.El codigo javascript es el sgte:





<script type="text/javascript">

/*<![CDATA[*/

jQuery(function($) {

jQuery('#SCOT_Fecha').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['es'], {'showAnim':'slide','dateFormat':'yy/mm/dd'}));

jQuery('body').delegate('#solicitud_cotizacion_PRY_Id','change',function(){jQuery.ajax({'type':'POST','url':'/proyecto/index.php?r=compras/cargar','cache':false,'data':jQuery(this).parents("form").serialize(),'success':function(html){jQuery("#solicitud_cotizacion_REQ_Id").html(html)}});return false;});

jQuery('body').delegate('#yt0','click',function(){jQuery.ajax({'type':'POST','url':'/proyecto/index.php?r=compras/cargar2','cache':false,'data':jQuery(this).parents("form").serialize(),'success':function(html){jQuery("#form2").html(html)}});return false;});


				if(!window.location.hash)

					$('').focus();

			

});

/*]]>*/


</script>



Además estoy usando un ajaxSubmitButton, el cual funciona bien, y viendo el codigo javascript generado es similar al del dropdown, no pudiendo solucionarlo opté por incluir una función javascript en el codigo:




<script type="text/javascript">

$(document).ready(function(){

$("#solicitud_cotizacion_PRY_Id").change(function(){

if($(this).val()!=""){

var dato=$(this).val();

$.ajax({

type:"POST",

dataType:"html",

url:"/proyecto/index.php?r=compras/cargar",

data:"PRY_Id="+dato,

success:function(msg){

$("#solicitud_cotizacion_REQ_Id").empty().removeAttr("disabled").append(msg);

}


});


}else{


$("#solicitud_cotizacion_REQ_Id").empty().attr("disabled","disabled");


}


});


});

</script>



Y los dropdown los dejé así:




<td>

<?php 

echo CHtml::activeDropDownList

($model,'PRY_Id',

CHtml::listData(requerimiento::model()->findAll(),

'PRY_Id','proyecto.PRY_Descripcion')

);


?>

</td>

</tr>


<td>


<?php echo $form->dropDownList($model,'REQ_Id',array());?>

      

</td>



El codigo del controlador lo dejé igual, solo eso alteré en la vista, y me funciona bien.Gracias

He visto otros posts en los que los scripts con renderPartial no eran procesados y han sido solucionados forzando el procesamiento despues del output:

$this->renderPartial($view, array(), false, TRUE);

No sé si ése era tu caso ya que has dicho que dentro del mismo renderPartial usabas un boton ajax que funcionaba y es casi el mismo código. De todas formas, me alegro que hayas encontrado una solución

un poco tarde pero para que quede como referencia futura.

[b]

[font="Arial, Helvetica, sans-serif"][color="#111111"]http://www.yiiframeworkenespanol.org/index.php?r=site/ejemplos&modulo=combodependiente[/color][/font][/b]

[font="Arial, Helvetica, sans-serif"][color="#111111"]

[/color][/font]

[font="Arial, Helvetica, sans-serif"][color="#111111"]ahi tenemos varios ejemplos con codigo de soporte github y prueba en caliente:[/color][/font]

[font="Arial, Helvetica, sans-serif"][color="#111111"]

http://www.yiiframeworkenespanol.org/index.php?r=site/ejemplos[/color][/font]