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
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> </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
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
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]