Yii Framework Forum: Ejemplo combo dependiente? - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Ejemplo combo dependiente? Rate Topic: -----

#1 User is offline   Luisis 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 20-December 10

Posted 11 January 2011 - 10:23 AM

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
0

#2 User is offline   sebas 

  • Advanced Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 496
  • Joined: 28-October 08
  • Location:Buenos Aires, Argentina

Posted 11 January 2011 - 10:24 AM

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

Saludos,
0

#3 User is offline   Luisis 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 20-December 10

Posted 11 January 2011 - 10:37 AM

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);
            }
    }


0

#4 User is offline   Luisis 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 20-December 10

Posted 11 January 2011 - 12:01 PM

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

#5 User is offline   Antonio Ramirez 

  • Elite Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 1,448
  • Joined: 04-October 10

Posted 11 January 2011 - 12:14 PM

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
),


¿How long would it take for you to understand that you own nothing in this world?

www.ramirezcobos.com
www.2amigos.us
www.github.com/tonydspaniard
www.github.com/2amigos


Posted Image
0

#6 User is offline   Luisis 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 20-December 10

Posted 11 January 2011 - 12:55 PM

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:
0

#7 User is offline   Antonio Ramirez 

  • Elite Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 1,448
  • Joined: 04-October 10

Posted 11 January 2011 - 01:04 PM

 Luisis, on 11 January 2011 - 12:55 PM, said:

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
¿How long would it take for you to understand that you own nothing in this world?

www.ramirezcobos.com
www.2amigos.us
www.github.com/tonydspaniard
www.github.com/2amigos


Posted Image
0

#8 User is offline   Antonio Ramirez 

  • Elite Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 1,448
  • Joined: 04-October 10

Posted 11 January 2011 - 01:16 PM

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?
¿How long would it take for you to understand that you own nothing in this world?

www.ramirezcobos.com
www.2amigos.us
www.github.com/tonydspaniard
www.github.com/2amigos


Posted Image
0

#9 User is offline   Luisis 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 20-December 10

Posted 12 January 2011 - 12:19 AM

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
0

#10 User is offline   Antonio Ramirez 

  • Elite Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 1,448
  • Joined: 04-October 10

Posted 12 January 2011 - 02:05 AM

 Luisis, on 12 January 2011 - 12:19 AM, said:

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?
¿How long would it take for you to understand that you own nothing in this world?

www.ramirezcobos.com
www.2amigos.us
www.github.com/tonydspaniard
www.github.com/2amigos


Posted Image
0

#11 User is offline   sebas 

  • Advanced Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 496
  • Joined: 28-October 08
  • Location:Buenos Aires, Argentina

Posted 12 January 2011 - 03:29 PM

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

Saludos
0

#12 User is offline   Luisis 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 20-December 10

Posted 12 January 2011 - 04:08 PM

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>

0

#13 User is offline   Antonio Ramirez 

  • Elite Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 1,448
  • Joined: 04-October 10

Posted 12 January 2011 - 06:04 PM

Como randerizas el contenido? es renderPartial o render?
Puedes verificar el codigo que se escribe en el navegador? El javascript resultante...
¿How long would it take for you to understand that you own nothing in this world?

www.ramirezcobos.com
www.2amigos.us
www.github.com/tonydspaniard
www.github.com/2amigos


Posted Image
0

#14 User is offline   Luisis 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 20-December 10

Posted 12 January 2011 - 06:36 PM

 Antonio Ramirez, on 12 January 2011 - 06:04 PM, said:

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
0

#15 User is offline   Antonio Ramirez 

  • Elite Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 1,448
  • Joined: 04-October 10

Posted 12 January 2011 - 07:27 PM

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
¿How long would it take for you to understand that you own nothing in this world?

www.ramirezcobos.com
www.2amigos.us
www.github.com/tonydspaniard
www.github.com/2amigos


Posted Image
0

#16 User is offline   bluyell 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 222
  • Joined: 28-October 11

Posted 30 October 2012 - 06:40 PM

un poco tarde pero para que quede como referencia futura.


http://www.yiiframew...ombodependiente




ahi tenemos varios ejemplos con codigo de soporte github y prueba en caliente:

http://www.yiiframew...r=site/ejemplos

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users