Como Seleccionar un dato abriendo una ventana

Hola.

Soy nuevo con Yii y de antemano agradezco la ayuda que me podais ofrecer.

Tengo una tabla de facturas y otra de clientes, en la tabla de facturas existe un campo con el Id del cliente.

Al crear una nueva factura, tengo que introducir el Id del cliente.

Me gustaria tener un boton al lado del Id del cliente para que al pulsarlo se abra una ventana.

En la ventana deberia salir una rejilla de clientes y al seleccionar uno de los registros se actualiza el campo Id del cliente de la factura.

He estado buscando y probando con diferentes extensiones, pero no acabo de hacer lo que quiero.

He estado probando tambien con un campo y el widget CAutoComplete, pero no consiguo que funcione.

Espero vuestra ayunda.

Gracias

Hola y bienvenido!

Ayudaría mucho que postées el código de lo que tenés hecho hasta ahora. así es más fácil encontrar una solución.

Hola.

Gracias Luciano por responder.

He abierto un nuevo post para identificar mejor el problema.

Gracias.

Amigo aun tienes la duda? puedes usar esta extension.

http://www.yiiframework.com/extension/echosen

aqui el demo:

http://harvesthq.github.com/chosen/

se usa asi:

<?php $this->widget(‘ext.EChosen.EChosen’); ?>

<?php echo $form->dropDownList($model, ‘var_nombre’,

array(‘1’=>‘opcion1’,‘2’=>‘opcion2’),

array(‘class’ => ‘chzn-select’)); ?>

es un desplegable con opcion a buscar.

o bueno podemos constrir la ventana desplegable

Como lo puedo usar para combos dinamicos (extension EChosen), o sea, como actualiza el segundo combo, alguien dijo (@adinugro) en el post de la extension poner esto:




$( 'select' ).chosen();



despues de insertar un nuevo select con JavaScript, pero no tengo idea de como es, ¿Alguien lo ha hecho o sabe como hacerlo?

Buenas.

Creo q te has liado un poco.

Es necesario una nueva ventana? Por qué no una lista desplegable que cargue todos los clientes?

Por ejemplo:




echo CHtml::activeDropDownList(

                              $model,

                              'cliente_id',

                              CHtml::listdata(Cliente::model()->findAll(), 'cliente_id', 'nombre')

                              );



Teniendo en cuenta que tu tabla de clientes se llame "cliente" y existan los campos "cliente_id" y "nombre". Si no cámnbialos por los que sean.

Con esto tendrás una lista desplegable en la cuál podrás elegir un cliente. Si quieres que al escribir te vaya filtrando los clientes, yo usaría un "select2" en lugar de un "EChosen".

Un saludo.

Hola lagogz, nunca he utilizado select2, podrias mostrarme un ejemplo de como utlizarlo en combos dinamicos, para terminar mi problema con los filtros en estos tipos de combos (DropDownList)

Buenas.

Ahí vá Rafa:




$this->widget('ext.select2.ESelect2',

                    array(

                        'name'=>'selectInput',

                        'data'=>array(

                                    0=>'Item 1',

                                    1=>'Item2',

                                    2=>'Item 3',

                                    ),

                        'htmlOptions' => array(

                                            'style' => 'width: 200px;',

                                            'onchange' => '

                                                        switch(parseInt($("#selectInput").val()))

                                                        {

                                                            case 0:

                                                                $("#dependentSelectInput").html("<option value=\"1\">Subitem 1.1</option><option value=\"2\">Subitem 1.2</option>");

                                                                break;

                                                            case 1:

                                                                $("#dependentSelectInput").html("<option value=\"1\">Subitem 2.1</option><option value=\"2\">Subitem 2.2</option>");

                                                                break;

                                                            case 2:

                                                                $("#dependentSelectInput").html("<option value=\"1\">Subitem 3.1</option><option value=\"2\">Subitem 3.2</option>");

                                                                break;

                                                        }

                                                        ')

                        )

                  );

    

    $this->widget('ext.select2.ESelect2',

                    array(

                        'name'=>'dependentSelectInput',

                        'data'=>array(),

                        'htmlOptions' => array('style' => 'width: 200px;')

                        )

                  );



La extensión utilizada es Select2.

Este ejemplo es sin modelos, pero sería exactamente igual añadiendo las opciones "model" y "attributes". Está explicado en la doc de la extensión.

Y si lo quieres hacer mediante AJAX (que sería lo lógico para cargar datos de db) simplemente reemplaza el código del evento "onchange" por una llamada AJAX ( $.ajax({}); ) .

Un saludo.

Ok Gracias lagogz, por esta via pude resolver, lo hice mediante ajax, quedo asi:




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

                    	<?php

                    	$this->widget('ext.select2.ESelect2', array(

                        	'name' => 'CodCliente',

                        	'data' => CHtml::listData(Clientes::model()->findAll(), 'CodCliente', 'Descripcion'),

                        	'htmlOptions' => array(

                            	'style' => 'width: 200px;',

                            	'ajax' => array(

                            	'type' => 'POST',

                            	'url' => CController::createUrl('datossal/actualizarFirmantes'),

                            	'dataType' => 'json',

                            	'data' => array('idCodigo' => 'js:this.value'),

                            	'success' => 'function(data) {

				$("#Datossal_CI").html(data.firmantes); 

			}')

                    	)));

                    	?>



el segundo combo lo mantuve como lo tenia

Me alegro, un saludo.