Dudas sobre trabajo con modulos

Buenas lagogz, en realidad no se lo que pasa, lo puse como lo sugeriste y sigue igual, te comento que antes de poner los modulos estas cosas trabajaban bien.

Gracias por responder, ya el problema que me queda es que no carga los resultados de los segundos combos dependientes, ni los cuadros textos dependientes de otro, aunque no genera errores, aunque en el debug si los muestra, parece paradógico pero es asi, ya arriba puse estas imagenes vacias y al ir al d4ebug si veo los resultados.

Aclaro en que en el form utilizo una funcion javascrip para obtener los datos, es esta:




<script type="text/javascript">

	$(function() {

	//Add, Save, Edit and Delete functions code

	$(".btnEdit").on("click", Edit);

        	$(".btnDelete").on("click", Delete);

        	$("#btnAdd").on("click", Add);

        	ActualizarCodigo();

        	//  var_dump('hasta aquí llego');

        	//   exit;

        	$.ajax({

   		// 'url' = > Yii::app() - > createUrl('/facturacion/datosrecepcion/actualizarCombos'),

            	url: 'index.php?r=/facturacion/datosrecepcion/actualizarCombos',

                	type: 'POST',

                	dataType: 'json',

                	data: {

                	"idCod": $('#Datosrecepcion_CodUEB').val()

                	},

                	success: function(data) {

                	$("#Datosrecepcion_CIFac").html(data.nfacturador);

                        	$("#Datosrecepcion_CIEnt").html(data.entrega);

                	}

        	});

        	$.ajax({

      	//  'url' = > Yii::app() - > createUrl('/facturacion/datosrecepcion/actualizarDestino'),

             		url: 'index.php?r=/facturacion/datosrecepcion/actualizarDestino',

                	type: 'POST',

                	dataType: 'json',

                	data: {

                	"idCodent": $('#Datosrecepcion_Codentrada').val()

                	},

                	success: function(data) {

                	$("#Datosrecepcion_Codde").html(data.destinoEntrada);

                	}

        	});

	});

        	function Add() {

        	if ($('#producto').val() !== '') {

        	var codigo = $('#incodigo').val() === '' ? '0' : $('#incodigo').val();

                	var cantidad = $('#incantidad').val() === '' ? '0' : $('#incantidad').val();

                	$("#tblData tbody").append(

                	"<tr class='even'>" +

                	"<td>" + codigo + "</td>" +

                	"<td>" + $('#producto').val() + "</td>" +

                	"<td>" + cantidad + "</td>" +

                	"<td><img src='images/update.png' class='btnEdit' title='Actualizar' style='cursor:pointer'>	<img src='images/delete.png' class='btnDelete' title='Eliminar' style='cursor:pointer'/></td>" +

                	"</tr>");

                	$(".btnEdit").off("click");

                	$(".btnDelete").off("click");

                	$(".btnEdit").on("click", Edit);

                	$(".btnDelete").on("click", Delete);

                	document.getElementById('incantidad').value = '';

                	$('#incodigo').val("");

                	$('#producto').val("");

                	ActualizarCodigo();

        	}

        	else {

        	alert('Debe introducir un producto');

        	}

        	};

        	var oldCantidad;

        	function Edit() {

        	var par = $(this).parent().parent(); //tr

                	var tdCantidad = par.children("td:nth-child(3)");

                	var tdButtons = par.children("td:nth-child(4)");

                	oldCantidad = tdCantidad.html();

                	tdCantidad.html("<input type='text' id='txtCantidad' value='" + tdCantidad.html() + "'/>");

                	tdButtons.html("<img src='images/save.png' class='btnSave' title='Guardar' style='cursor:pointer'/>	<img src='images/cancel.gif' class='btnCancel' title='Cancelar' style='cursor:pointer'/>");

                	$(".btnEdit").off("click");

                	$(".btnDelete").off("click");

                	$(".btnSave").on("click", Save);

                	$(".btnCancel").on("click", Cancel);

                	$(".btnEdit").on("click", Edit);

                	$(".btnDelete").on("click", Delete);

        	}

	;

        	function Save() {

        	var par = $(this).parent().parent(); //tr

                	var tdCantidad = par.children("td:nth-child(3)");

                	var tdButtons = par.children("td:nth-child(4)");

                	tdCantidad.html(tdCantidad.children("input[type=text]").val());

                	tdButtons.html("<img src='images/update.png' class='btnEdit' title='Actualizar' style='cursor:pointer'/>	<img src='images/delete.png' class='btnDelete' title='Eliminar' style='cursor:pointer'/>");

                	$(".btnEdit").off("click");

                	$(".btnDelete").off("click");

                	$(".btnEdit").on("click", Edit);

                	$(".btnDelete").on("click", Delete);

        	}

	;

        	function Cancel() {

        	var par = $(this).parent().parent(); //tr

                	var tdCantidad = par.children("td:nth-child(3)");

                	var tdButtons = par.children("td:nth-child(4)");

                	tdCantidad.html(oldCantidad);

                	tdButtons.html("<img src='images/update.png' class='btnEdit' title='Actualizar' style='cursor:pointer'/>	<img src='images/delete.png' class='btnDelete' title='Eliminar' style='cursor:pointer'/>");

                	$(".btnEdit").off("click");

                	$(".btnDelete").off("click");

                	$(".btnEdit").on("click", Edit);

                	$(".btnDelete").on("click", Delete);

        	}

	;

        	function Delete() {

        	var par = $(this).parent().parent(); //tr

                	$('#producto')

                	.append($("<option></option>")

                        	.attr("value", par.children("td:nth-child(1)").html())

                        	.text(par.children("td:nth-child(2)").html()));

                	ActualizarCodigo();

                	par.remove();

        	}

	;

        	function ActualizarCodigo() {


        	$('#incodigo').val($('#producto option:selected').val());

        	}

	;

        	$('#datosrecepcion-form').live('submit', function() {


	var tbl = $('#tblData tbody tr').map(function() {

	var row = $(this);

        	return {producto: row.find(':nth-child(1)').text(),

                	cantidad: row.find(':nth-child(3)').text(),

        	};

	}).get();

        	$.ajax({

     		//'url' = > Yii::app() - > createUrl('/facturacion/datosrecepcion/salvarRecepcion'),

        	url: 'index.php?r=/facturacion/datosrecepcion/salvarRecepcion',

                	type: 'POST',

                	dataType: 'text',

                	data: {"detalle": tbl,

                        	"idn": $('#Datosrecepcion_Idn').val(),

                        	"fecha": $('#Datosrecepcion_Fecha').val(),

                        	"codueb": $('#Datosrecepcion_CodUEB').val(),

                        	"idestado": $('#Datosrecepcion_IdEstado').val(),

                        	"cifac": $('#Datosrecepcion_CIFac').val(),

                        	"nvale": $('#Datosrecepcion_nvale').val(),

                        	"codde": $('#Datosrecepcion_Codde').val(),

                        	"cient": $('#Datosrecepcion_CIEnt').val(),

                        	"codprovedor": $('#Datosrecepcion_CodProvedor').val(),

                        	"ci": $('#Datosrecepcion_CI').val(),

                        	"codentrada": $('#Datosrecepcion_Codentrada').val(),

                        	"1": $('#Datosrecepcion_CodDoc').val(),

                        	"modelid": $('#modelid').val()

                	},

                	success: function(data) {

                	if (data === 'fail')

                        	alert('Ya existe un registro con ese número consecutivo');

                        	else

                        	window.location.href = 'index.php?r=datosrecepcion/admin';

                	}

        	});

        	return false;

	});

</script>



Y cómo conseguiste que te cargase los componentes?

Respecto a tu última duda, si el procedimiento llega a la función success de tu javascript, puedes probar a hacer un console.log(data) en esa función a ver si te devuelve los datos que tú esperas (los prodrás ver en la consola del navegador), y si tienen el nombre que tú esperas. A mi me suena que el problema puede ser que los controles tengan ids diferentes a los q especificas en tu Jvascript.

Un saludo.

[quote=“rafaelrosales, post:22, topic:86339”]

Gracias por responder, ya el problema que me queda es que no carga los resultados de los segundos combos dependientes, ni los cuadros textos dependientes de otro, aunque no genera errores, aunque en el debug si los muestra, parece paradógico pero es asi, ya arriba puse estas imagenes vacias y al ir al d4ebug si veo los resultados.

Aclaro en que en el form utilizo una funcion javascrip para obtener los datos, es esta:




<script type="text/javascript">

	$(function() {

	//Add, Save, Edit and Delete functions code

	$(".btnEdit").on("click", Edit);

        	$(".btnDelete").on("click", Delete);

        	$("#btnAdd").on("click", Add);

        	ActualizarCodigo();

        	//  var_dump('hasta aquí llego');

        	//   exit;

        	$.ajax({

   		// 'url' = > Yii::app() - > createUrl('/facturacion/datosrecepcion/actualizarCombos'),

            	url: 'index.php?r=/facturacion/datosrecepcion/actualizarCombos',

                	type: 'POST',

                	dataType: 'json',

                	data: {

                	"idCod": $('#Datosrecepcion_CodUEB').val()

                	},



Hola lagogz, gracias por responder, aqui muestro los resultados de una de las aciones al llamar el provedor en tres imagenes:

Imagen 1: es el resultado que se muestra al seleccionar la UEB el Alba y me muestra el segundo Combo vacio:

Imagen 2: es el resultado al hacer el debug, donde el idCodigo de la UEB El Alba

imagen 3: Muestra el resultado al debuguear donde se observa la respuesta con el Id y el Nombre de la persona que se debio mostrar en el segundo combo que no la muestra.

Buenas.

Es que para mi gusto os complicáis demasiado con las listas desplegables enlazadas.

Yo lo que hago es:

Vista:




echo CHtml::dropDownList(

                 'listProveedor',

                 'tuValor',        // O vacío, lo que quieras.

                 CHtml::listData(........),// Por ejemplo Proveedor::model()->findAll(),...

                 array(

                       'prompt' => 'Seleccione Proveedor',

                       'ajax' => array(

                                      'type'=>'POST',

                                      'url'=>Yii::app()-> createUrl('/facturacion/datosrecepcion/actualizarCombos'), 

                                      'update'=>'#listFacturador',

                                      )));


echo CHtml::dropDownList(

                 'listFacturador',

                 'tuValor',        // O vacío, lo que quieras.

                 array(),          // O cargas datos relacionados con la lista padre.

                 array(

                       'prompt' => 'Seleccione Facturador'

                       ));



Controlador:




public function actionActualizarCombos()

{

     // Resultado de la acción.

     $result = "";


     // Identificador de proveedor pasado como Post.

     $proveedorId = (int) $_POST['listProveedor'];


     // Datos de facturadores recogidos a partir del identificador de proveedor.

     $modelData = Facturador::model()->findAll(

                              array(

                                    'condition' => 'proveedor_id = :proveedorId',

                                    'params' => array(':proveedorId' => $proveedorId)

                                    )

                              );


     // Si hay datos de facturadores.

     if(!empty($modelData))

     {

          // Los convertimos a una lista con los datos que nos interesan para la lista desplegable.

          // Normalmente queremos que cada elemento de la lista desplegable tenga como valor 

          // el identificador y como texto visible en nombre o descripción del elemento.

          $data = CHtml::listData($modelData, 'facturador_id', 'nombre_facturador');


          // Recorremos todos los facturadores existentes para el proveedor dado y vamos contruyendo 

          // la respuesta, que será el código de nuestra lista enlazada.

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

          {

               $result .= CHtml::tag(

                                    'option', 

                                    array('value' => $value),

                                    CHtml:.encode($text),

                                    true);

          }

     }


     // Devolvemos el código de nuestra lista enlazada.

     echo($result);



Y creo que no me olvido nada, lo he escrito de memoria, pero creo que está bien.

Por supuesto tendrás que cambiar los nombres (de modelos, propiedades, listas, campos, etc…) por los que tu tengas, pero creo que es un código mucho más fácil de seguir y má limpio. Y por supuesto puedes utilizar activeDropDownList en lugar de dropDownList.

Prueba esto a ver que te sale.

Un saludo.

Gracias lagogz voy a probar lo que me sugeriste, ayer no pude ver nada, ya que estaba complicado con otro trabajo y no entre a mi PC de escritorio, y en la laptop, no uso interne, luego de comento

Buenas tardes lagogz, lo puse asi y sigue igual, no muestra los resultados en los segundos combos a pesar de que en el debug si los muestra:

en el controlador




public function actionActualizarCombos() {

      	$result = "";

    	$entidadesId = (int) $_POST['CodUEB'];

    	//llenar Facturadores

 		$modelData = Nfacturador::model()->findAll(

            	array(

                	'condition' => 'CodUEB = :CodUEB',

                	'params' => array(':CodUEB' => $entidadesId)

            	)

    	);    	

   		if (!empty($modelData)) {

          	$data = CHtml::listData($modelData, 'CIFac', 'Descripcion');

         		foreach ($data as $value => $text) {

            	$result .= CHtml::tag(

            	'option',

            	array('CIFac' => $value),

            	CHtml::encode($text),

            	true);

        	}

    	}

   	$modelData1 = Entrega::model()->findAll(

            	array(

                	'condition' => 'CodUEB = :CodUEB',

                	'params' => array(':CodUEB' => $entidadesId)

            	)

    	);

    	if (!empty($modelData1)) {      	

 			$data = CHtml::listData($modelData1, 'CIEnt', 'Descripcion');

       		foreach ($data as $value => $text) {

            	$result .= CHtml::tag(

            	'option',

            	array('CIEnt' => $value),

            	CHtml::encode($text),

            	true);

        	}

    	}

   	echo($result);

	}



en la forma

1er combo




<td>

                    	<?php echo $form->labelEx($model, 'CodUEB'); ?>

                    	<?php

                    	echo CHtml::DropDownList(

                            	'CodUEB', 'CodUEB', CHtml::listData(Entidades::model()->findAll(), 'CodUEB', 'NEnt'), array('prompt' => 'Seleccione la entidad',

                        	'ajax' => array(

                            	'type' => 'POST',

                            	'url' => Yii::app()->createUrl('/facturacion/datosrecepcion/actualizarCombos'),

                            	'update' => '#Datosrecepcion_CIFac',

                            	'update' => '#Datosrecepcion_CIEnt',

                    	)));

                    	?>

                    	<?php echo $form->error($model, 'CodUEB'); ?>  

                	</td>



segundo combo dependiente (aqui hay dos combos dependientes del primero)




<td title="Selecione quien recepciona">

                    	<?php echo $form->labelEx($model, 'CIFac'); ?>

                    	<?php

                    	echo CHtml::dropDownList(

                            	'#Datosrecepcion_CIFac', 'CIFac', // O vacío, lo que quieras.

                            	array(), // O cargas datos relacionados con la lista padre.

                            	array(

                        	'prompt' => 'Seleccione Facturador'

                    	));

                    	;

                    	?><?php echo $form->error($model, 'CIFac'); ?>


                	</td>

                	<td title="Selecione quien recepciona">

                    	<?php echo $form->labelEx($model, 'CIEnt'); ?>

                    	<?php

                    	echo CHtml::dropDownList(

                            	'#Datosrecepcion_CIEnt', 'CIEnt', // O vacío, lo que quieras.

                            	array(), // O cargas datos relacionados con la lista padre.

                            	array(

                        	'prompt' => 'Seleccione entrega en almacen'

                    	));

                    	;

                    	?><?php echo $form->error($model, 'CIEnt'); ?>


                	</td>



Buenas de nuevo.

En el primer combo tienes 2 updates. Creo q sólo te va a coger uno de ellos.

En el segundo combo tienes como nombre del combo "#Datosrecepcion_CIFac". Te sobra la almohadilla.

Un saludo.

Buenos dias, Gracias lagogz, en realidad ese era un problema, lo puse asi ahora, el controlador lo deje igual, me pone el resultados de los dos segundos combos dependientes en los dos, o sea, me pone los facturadores y los almaceneros en el 1er combo dependiente y en el 2do combo dependiente, lo debe poner por separado:

1er combo




<td>

                    	<?php echo $form->labelEx($model, 'CodUEB'); ?>

                    	<?php

                    	echo CHtml::DropDownList(

                            	'CodUEB', 'CodUEB', CHtml::listData(Entidades::model()->findAll(), 'CodUEB', 'NEnt'), array('prompt' => 'Seleccione la entidad',

                        	'ajax' => array(

                            	'type' => 'POST',

                            	'url' => Yii::app()->createUrl('/facturacion/datosrecepcion/actualizarCombos'),

                            	'update' => '#Datosrecepcion_CIFac, #Datosrecepcion_CIEnt',

                       		// 'update' => '#Datosrecepcion_CIEnt',

                    	)));

                    	?>

                    	<?php echo $form->error($model, 'CodUEB'); ?>  

                	</td>



1er combo dependiente




<td title="Selecione quien recepciona">

                    	<?php echo $form->labelEx($model, 'CIFac'); ?>

                    	<?php

                    	echo CHtml::dropDownList(

                            	'Datosrecepcion_CIFac', 'CIFac', // O vacío, lo que quieras.

                            	array(), // O cargas datos relacionados con la lista padre.

                            	array(

                        	'prompt' => 'Seleccione Facturador'

                    	));

                    	;

                    	?><?php echo $form->error($model, 'CIFac'); ?>


                	</td>



2do combo dependiente




<<td title="Seleccione entrega en almacen">

                    	<?php echo $form->labelEx($model, 'CIEnt'); ?>

                    	<?php

                    	echo CHtml::dropDownList(

                            	'Datosrecepcion_CIEnt', 'CIEnt', // O vacío, lo que quieras.

                            	array(), // O cargas datos relacionados con la lista padre.

                            	array(

                        	'prompt' => 'Seleccione entrega en almacen'

                    	));

                    	;

                    	?><?php echo $form->error($model, 'CIEnt'); ?>


                	</td>



tambien como lo hago donde utilizo select2

Buenas, Rafael, no me quedó muy clara tu respuesta.

Lo has solucionado entonces?

En un select2 de YiiBooster (no sé cuál usas tú) sería igual.




$this->widget(

          'booster.widgets.TbSelect2',

          array(

               'name' => 'mySelect_1',

               'value' => '',

               'data' => CHtml::listData(

                               MyModel::model()->findAll(array('order'=>'MyField ASC')), 

                               'myFieldId', 

                               'myField'

                                ),

               'options' => array('placeholder' => 'Select a item'),

               'htmlOptions' => array(

                                   'id' => 'mySelect_1',

                                   'onchange' => '$("#mySelect_2").select2("val", "");',

                                   'ajax' => array(

                                                'type'=>'POST',

                                                'url'=>Yii::app()->createUrl('myUrl'), 

                                                'update'=>'#mySelect_2',

                                                )

                                    )

               )

           );




$this->widget(

            'booster.widgets.TbSelect2',

             array(

                  'model' => $myModel,

                  'attribute' => 'myFieldId2',

                  'data' => array(),

                  'options' => array('placeholder' => 'Select a item'),

                  'htmlOptions' => array('id' => 'mySelect_2')

                  )

           );



Fíjate que el primer select lo uso sin modelo y el segundo con él, para que te sirva de ejemplo.

Un saludo.

Buenos dias lagogz, gracias por responder, voy a probar esto, en el otro con dos combos dependientes, es que me muestra el resultado de ambos combos en los dos, o sea, en el primer combo debe mostrar los facturadores y en el segundo los encargados de almacen, y me los muestra todo en los dos combos (facturadores y encargados de almacen) y debe hacerlo por separado

Buenas, Rafael.

Es que para actualizar los 2 combos debes utilizar la opción "success" en lugar de la opción "update".

Devuelves un array con 2 elementos en el que cada elemento tenga el código de una de las listas desplegables.

Y en el "success" actualizas una lista con el código del primer elemento del array y la otra con el segundo. Algo así:




...

...

'ajax' => array(

               ...

               ...

               'success' => "function(data)

                             {

                                  // Compruebas si data existe o tiene datos.

                                  // ...

                                  // ... y si tiene datos...

                                  $('#myId1').html(data.element1);

                                  $('#myId2').html(data.element2);

                             }"

               ...

               ...

               ),

...

...



Un saludo.

Hola, necesito revisar esta parte de codigo para pasarle un dato de cada tabla al form,

En controlador:




 public function actionActualizarCombos() {

    	$result = "";

    	$result1 = "";

    	$entidadesId = (int) $_POST['CodUEB'];

    	//llenar Facturadores

    	$modelData = Nfacturador::model()->findAll(

            	array(

                	'condition' => 'CodUEB = :CodUEB',

                	'params' => array(':CodUEB' => $entidadesId)

            	)

    	);

    	if (!empty($modelData)) {

        	$data = CHtml::listData($modelData, 'CIFac', 'Descripcion');

        	foreach ($data as $value => $text) {

            	$result .= CHtml::tag(

                            	'option', array('CIFac' => $value), CHtml::encode($text), true);

        	}

    	}

    	$modelData1 = Entrega::model()->findAll(

            	array(

                	'condition' => 'CodUEB = :CodUEB',

                	'params' => array(':CodUEB' => $entidadesId)

            	)

    	);

    	if (!empty($modelData1)) {

        	$data = CHtml::listData($modelData1, 'CIEnt', 'Descripcion');

        	foreach ($data as $value => $text) {

            	$result1 .= CHtml::tag(

                            	'option', array('CIEnt' => $value), CHtml::encode($text), true);

        	}

    	}

 		echo ($result);

      	echo ($result1); 

	}




en la forma




<?php

                    	echo CHtml::DropDownList(

                            	'CodUEB', 'CodUEB', CHtml::listData(Entidades::model()->findAll(), 'CodUEB', 'NEnt'), array('prompt' => 'Seleccione la entidad',

                        	'ajax' => array(

                            	'type' => 'POST',

                            	'url' => Yii::app()->createUrl('/facturacion/datosrecepcion/actualizarCombos'),

                            	//'dataType' => 'json',

                            	'success' => "function(data)

                     		{                     		

                              	$('#Datosrecepcion_CIFac').html(data); //como puedo pasar un dato aqui a cada modelo dependiente, se que debe ser:  $('#Datosrecepcion_CIFac').html(data.dato);

                            	$('#Datosrecepcion_CIEnt').html(data);

                     		}"

                        	)

                            	)

                    	);


                    	echo CHtml::dropDownList(

                            	'Datosrecepcion_CIFac', 'CIFac', // O vacío, lo que quieras.

                            	array(), // O cargas datos relacionados con la lista padre.

                            	array(

                        	'prompt' => 'Seleccione Facturador'

                    	));


                    	echo CHtml::dropDownList(

                            	'Datosrecepcion_CIEnt', 'CIEnt', // O vacío, lo que quieras.

                            	array(), // O cargas datos relacionados con la lista padre.

                            	array(

                        	'prompt' => 'Seleccione entrega en almacen'

                    	));

                    	?>



asi en cada combo dependiente me muestra los resulados de los dos combos

Buenas, Rafael.

Por ejemplo puedes hacer lo siguiente:

Controlador:




...

...

$result = array(

               'cifac' => null,

               'cient' => null

               );

...

...

$result['cifac'] .= CHtml::tag('option', array('CIFac' => $value), CHtml::encode($text), true);

...

...

$result['cient'].= CHtml::tag('option', array('CIEnt' => $value), CHtml::encode($text), true);

...

...

echo(json_encode($result));

...

...



Vista:




...

...

'dataType' => 'json',

...

...

$('#Datosrecepcion_CIFac').html(data.cifac);

$('#Datosrecepcion_CIEnt').html(data.cient);

...

...



Un saludo.

Buenos tardes para ti alla en galiza aqui buenos dias, gracias lagogz por responder, mira lo puse asi:

En el controlador




public function actionActualizarCombos() {

    	$result = "";

    	$entidadesId = (int) $_POST['CodUEB'];

    	//llenar Facturadores

    	$modelData = Nfacturador::model()->findAll(

            	array(

                	'condition' => 'CodUEB = :CodUEB',

                	'params' => array(':CodUEB' => $entidadesId)

            	)

    	);

    	if (!empty($modelData)) {

        	$data = CHtml::listData($modelData, 'CIFac', 'Descripcion');

        	foreach ($data as $value => $text) {

            	$result .= CHtml::tag(

                            	'option', array('CIFac' => $value), CHtml::encode($text), true);

        	}

    	}

    	$modelData1 = Entrega::model()->findAll(

            	array(

                	'condition' => 'CodUEB = :CodUEB',

                	'params' => array(':CodUEB' => $entidadesId)

            	)

    	);

    	if (!empty($modelData1)) {

        	$data = CHtml::listData($modelData1, 'CIEnt', 'Descripcion');

        	foreach ($data as $value => $text) {

            	$result .= CHtml::tag(

                            	'option', array('CIEnt' => $value), CHtml::encode($text), true);

        	}

    	}


    	$result = array(

        	'cifac' => null,

        	'cient' => null

    	);

    	$result['cifac'] .= CHtml::tag('option', array('CIFac' => $value), CHtml::encode($text), true);

    	$result['cient'].= CHtml::tag('option', array('CIEnt' => $value), CHtml::encode($text), true);

    	echo(json_encode($result));

	}



en la vista:




<td colspan="1">

                    	<?php echo $form->labelEx($model, 'CodUEB'); ?>

                    	<?php

                    	echo CHtml::DropDownList(

                            	'CodUEB', 'CodUEB', CHtml::listData(Entidades::model()->findAll(), 'CodUEB', 'NEnt'), array('prompt' => 'Seleccione la entidad',

                        	'ajax' => array(

                            	'type' => 'POST',

                            	'url' => Yii::app()->createUrl('/facturacion/datosrecepcion/actualizarCombos'),

                            	'dataType' => 'json',

                            	'success' => "js:function(data)

                         	{                         	

                          	$('#Datosrecepcion_CIFac').html(data.cifac);

                          	$('#Datosrecepcion_CIEnt').html(data.cient);


                         	}"

                        	)

                            	)

                    	);


                    	echo CHtml::dropDownList(

                            	'Datosrecepcion_CIFac', 'CIFac', // O vacío, lo que quieras.

                            	array(), // O cargas datos relacionados con la lista padre.

                            	array(

                        	'prompt' => 'Seleccione Facturador'

                    	));


                    	echo CHtml::dropDownList(

                            	'Datosrecepcion_CIEnt', 'CIEnt', // O vacío, lo que quieras.

                            	array(), // O cargas datos relacionados con la lista padre.

                            	array(

                        	'prompt' => 'Seleccione entrega en almacen'

                    	));

                    	?>

                    	<?php echo $form->error($model, 'CodUEB'); ?>  

                	</td>



ahora no muestra los resultados en los combos dependientes, pero en el debug me muestra el resultado de un valor para el segundo combo en los dos, asi:




<{"cifac":"<option CIFac=\"90072845247\">Luis Mario Rios Guillen<\/option>","cient":"<option CIEnt=\"90072845247\">Luis Mario Rios Guillen<\/option>"}

, ya habia tratado de obtener estos resultados por json tambien pero si resultados

Buenas, Rafael, es q no es como lo pusiste sino así (lo que pusiste en tu controlador no tiene mucho snetido):




public function actionActualizarCombos() {

        $result = array(

                'cifac' => "",

                'cient' => ""

        );


        $entidadesId = (int) $_POST['CodUEB'];


        //llenar Facturadores

        $modelData = Nfacturador::model()->findAll(

                array(

                        'condition' => 'CodUEB = :CodUEB',

                        'params' => array(':CodUEB' => $entidadesId)

                )

        );


        if (!empty($modelData)) {

                $data = CHtml::listData($modelData, 'CIFac', 'Descripcion');

                foreach ($data as $value => $text) {

                $result['cifac'] .= CHtml::tag(

                                'option', array('CIFac' => $value), CHtml::encode($text), true);

                }

        }


        $modelData1 = Entrega::model()->findAll(

                array(

                        'condition' => 'CodUEB = :CodUEB',

                        'params' => array(':CodUEB' => $entidadesId)

                )

        );

        if (!empty($modelData1)) {

                $data = CHtml::listData($modelData1, 'CIEnt', 'Descripcion');

                foreach ($data as $value => $text) {

                $result['cient'] .= CHtml::tag(

                                'option', array('CIEnt' => $value), CHtml::encode($text), true);

                }

        }


        echo(json_encode($result));

        }



Lo que yo te puse no era el código completo, los "…" significaban que ahí tendrías más código.

Un saludo.

Buenas lagogz, lo puse exactamente como sugeriste y me muestra todos los valores posibles en el debug, pero los combos me los deja vacios, luego le puse este script en el form y sigue igual




<script type="text/javascript">

	$(function() {

    	//Add, Save, Edit and Delete functions code

    	$(".btnEdit").on("click", Edit);

    	$(".btnDelete").on("click", Delete);

    	$("#btnAdd").on("click", Add);

    	ActualizarCodigo();


    	$(document).ready(function() {

     	

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

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

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

     	$.ajax({

     	type: "POST",

     	dataType: "json",

      	url: "/sgestion/index.php?r=/facturacion/datosrecepcion/actualizarCombos",

     	data:"CodUEB="+dato,

     	success: function(data) {

     	$("#Datosrecepcion_CIFac").html(data.cifac);

     	$("#Datosrecepcion_CIEnt").html(data.cient);

     	}

     	

     	});

     	} else {

     	

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

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

     	}

     	

     	});

     	});

</script>



Buenas, Rafael.

En mi mensaje #26, te puse esto:




public function actionActualizarCombos()

{

     // Resultado de la acción.

     $result = "";


     // Identificador de proveedor pasado como Post.

     $proveedorId = (int) $_POST['listProveedor'];


     // Datos de facturadores recogidos a partir del identificador de proveedor.

     $modelData = Facturador::model()->findAll(

                              array(

                                    'condition' => 'proveedor_id = :proveedorId',

                                    'params' => array(':proveedorId' => $proveedorId)

                                    )

                              );


     // Si hay datos de facturadores.

     if(!empty($modelData))

     {

          // Los convertimos a una lista con los datos que nos interesan para la lista desplegable.

          // Normalmente queremos que cada elemento de la lista desplegable tenga como valor 

          // el identificador y como texto visible en nombre o descripción del elemento.

          $data = CHtml::listData($modelData, 'facturador_id', 'nombre_facturador');


          // Recorremos todos los facturadores existentes para el proveedor dado y vamos contruyendo 

          // la respuesta, que será el código de nuestra lista enlazada.

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

          {

               $result .= CHtml::tag(

                                    'option', 

                                    array('value' => $value),

                                    CHtml:.encode($text),

                                    true);

          }

     }


     // Devolvemos el código de nuestra lista enlazada.

     echo($result);



No sé por qué, cambiaste mi código. Y en lugar de esto:




...

...

$result .= CHtml::tag(

                     'option', 

                      array('value' => $value),

                      CHtml:.encode($text),

                      true);

...

...



Pusiste esto otro:




...

...

$result .= CHtml::tag(

                     'option', 

                      array('CIEnt' => $value),

                      CHtml:.encode($text),

                      true);

...

...



Si te lees la documentación Yii, el segundo parámetro de CHtml::tag es para las propiedades HTML del control, por ejemplo para establecer un valor en la propiedad value como yo tenía. Qué propiedad HTML es CIEnt? Pq has cambiado la propiedad value por CIEnt y CIFac? Es q no lo entiendo? Si yo no te dije eso. En el código puse específicamente value.

En posteriores mensajes dices que probaste mi código pero sigue sin funcionarte. Lógico, no es el código que yo te puse, lo has modificado y está incorrecto. No puede establecer los nuevos valores de las listas desplegables pq no se los has establecido. De todas formas el motivo por el que no te refresca las listas no es éste. Aún no estableciendo el value, debería refrescarte las listas con los nombres.

La verdad es q en posteriores mensajes tuyos se me pasó revisar esa parte de mi código, pq no me imaginé que la cambiases.

Y para finalizar, si pones lo siguiente (y sólo y exclusivamente lo siguiente, sin scripts a mayores ni nada más, sólo esto), el código te funcionará perfectamente.

Controlador:




public function actionActualizarCombos() {

        $result = array(

                'cifac' => "",

                'cient' => ""

        );


        $entidadesId = (int) $_POST['CodUEB'];


        //llenar Facturadores

        $modelData = Nfacturador::model()->findAll(

                array(

                        'condition' => 'CodUEB = :CodUEB',

                        'params' => array(':CodUEB' => $entidadesId)

                )

        );


        if (!empty($modelData)) {

                $data = CHtml::listData($modelData, 'CIFac', 'Descripcion');

                foreach ($data as $value => $text) {

                $result['cifac'] .= CHtml::tag(

                                'option', array('value' => $value), CHtml::encode($text), true);

                }

        }


        $modelData1 = Entrega::model()->findAll(

                array(

                        'condition' => 'CodUEB = :CodUEB',

                        'params' => array(':CodUEB' => $entidadesId)

                )

        );

        if (!empty($modelData1)) {

                $data = CHtml::listData($modelData1, 'CIEnt', 'Descripcion');

                foreach ($data as $value => $text) {

                $result['cient'] .= CHtml::tag(

                                'option', array('value' => $value), CHtml::encode($text), true);

                }

        }


        echo(json_encode($result));

        }



Vista:




echo CHtml::DropDownList(

                         'CodUEB', 

                         '', 

                         CHtml::listData(Entidades::model()->findAll(), 'CodUEB', 'NEnt'), 

                         array(

                              'prompt' => 'Seleccione la entidad',

                              'ajax' => array(

                                         'type' => 'POST',

                                         'url' => Yii::app()->createUrl('/facturacion/datosrecepcion/actualizarCombos'),

                                         'dataType' => 'json',

                                         'data' => array('CodUEB' => 'js:this.value'),// O en el formato que sea, como se lo pases.

                                        'success' => "function(data)

                                                      {                               

                                                        $('#Datosrecepcion_CIFac').html(data.cifac);

                                                        $('#Datosrecepcion_CIEnt').html(data.cient);


                                                       }"

                                )

                                )

                        );


echo CHtml::dropDownList(

                        'Datosrecepcion_CIFac', 

                        '', 

                        array(),

                        array(

                        'prompt' => 'Seleccione Facturador'

                        ));


echo CHtml::dropDownList(

                        'Datosrecepcion_CIEnt', 

                        '',

                        array(), 

                        array(

                        'prompt' => 'Seleccione entrega en almacen'

                        ));




Una vez tengas esto escrito y probado, comenta que resultados has obtenido, y si te sigue funcionar, vamos revisando los debugs.

Pero lo principal es tener bien la base, sino es imposible seguir tu código.

Un saludo.

Buenas lagogz, lo puse asi y sigue igual, en el debug me muestra:




Parámetrosapplication/x-www-form-urlencoded[url=""]netParametersDoNotSort[/url]CodUEB0161204FuenteCodUEB=0161204

que es el codigo de la UEB, eso esta bien y el resulado me muestra:




<{"cifac":"<option value=\"70030913190\">Josefa Zamora Rond\u00f3n<\/option><option value=\"65120621498\">Ana Luisa Torres V\u00e1zquez<\/option><option value=\"66092415332\">Graciela Rond\u00f3n Estrada<\/option><option value=\"91110200612\">Yadira Torres Podio<\/option>","cient":"<option value=\"62072307660\">Rene Pelaez Lopez<\/option><option value=\"67040921108\">Cesar Gongora Ramirez<\/option><option value=\"70040107301\">Carlos Pompa Bertot<\/option><option value=\"83050721649\">Miguel Pardo Fonseca<\/option><option value=\"87111130183\">Jorge Reyes Mojena<\/option><option value=\"90072845247\">Luis Mario Rios Guillen<\/option>"}



que son los valores que deben aparecer en ambos combos