Mostrar datos

Hola…otra vez por estos lares :)

Hoy necesito la ayuda de quien me pueda colaborar… recordar soy nueva programando…estos son los primeros pasos…

El asunto es así:

Tengo un formulario que guarda los datos en una base de datos… en ese formulario tengo un droplist Tipo donde puedo escoger entre estas dos opciones:

1 Portátil y 2 Escritorio… lo que esta vez quiero hacer es que cuando yo escoja la Opción Portátil este me traiga el campo Serial pero si escojo la opción Escritorio

me traiga los campos Serial Monitor y Serial CPU… en si lo que quiero hacer es que el formulario me muestre los campos dependiendo de lo que escoja el usuario, cualquier ayuda es de utilidad :)

Quedo atenta a Comentarios

Gracias por la ayuda que me han brindado hasta el día de hoy …

Puedes utilizar jQuery para hacer eso, el cuál es una librería javascript que afortunadamente Yii ya trae incorporada. Existen varias formas de adjuntar un script personalizado a tus archivos de vista y parciales (_form.php), en mi caso prefiero crear un archivo javascript aparte e incorporarlo en mis archivos de vista. Los pasos son los siguientes:

[list=1][]Crear un archivo javascript en tu ubicación preferida, en mi caso lo guardo en una carpeta llamada js, ubicada en la raíz (junto con la carpeta assets, protected y themes entre otras).[]Agregar el siguiente código a tu archivo javascript: http://pastie.org/2295992. En este ejemplo, asegúrate de reemplazar el nombre del elemento (name=Computador) con el nombre que tiene tu modelo.[*]Agregar la linea de código que se encarga de incluir el archivo javascript a tu vista (en este caso se hace referencia a un archivo con el nombre "form-computador", debes reemplazarlo con el nombre que le des a tu archivo):


Yii::app()->clientScript->registerScriptFile(Yii::app()->request->baseUrl . '/js/form-computador.js', CClientScript::POS_END);

[*]IMPORTANTE: Debes asegurarte que las divs de tu archivo _form.php que contienen los elementos a ocultar/mostrar deben tener el mismo nombre que el usado en el archivo javascript, ejemplo:[/list][indent]


<div id="serial" class="row">

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

    	[...]        

</div>



[/indent]

[font="arial, verdana, tahoma, sans-serif"][size="2"]Mil gracias por su explicación, ya me funciona… hasta le agregue una lineas de mas…

[/size][/font]

Dejo el codigo que use por si alguien mas lo necesitase.

Hice esto:

  1. Cree la carpeta js en la siguiente ruta=>C:\wamp\prueba\js aqui se encuentra la carpeta proteted

  2. Modifique el código que me dio de ejemplo así: cambiando name=computador por name=Dotacion que es el nombre del modelo.





$(document).ready(function(){

	$('#Serial').hide();

	$('#Modelo').hide();

	$('#Modelo_CPU').hide();

    $('#Serial_CPU').hide(); // Como por defecto está seleccionada la opción 1, se ocultan los campos que tienen que ver con "Escritorio"

	$('#Modelo_Mon').hide();

	$('#Serial_Monitor').hide(); 

    $("select[name='Dotacion\\[Tipo\\]']").change(function(){

        if ($(this).val()== 'Portatil') { // Muestra el campo de portatil y oculta los campos de escritorio.

            $('#Serial').show();

			$('#Modelo').show();

			$('#Modelo_CPU').hide();

			$('#Serial_CPU').hide();

			$('#Modelo_Mon').hide();

            $('#Serial_Monitor').hide();  

        }

        if  ($(this).val()== 'Escritorio') { // Muestra los campos de escritorio y oculta el de portatil

            $('#Serial').hide();

			$('#Modelo').hide();

			$('#Modelo_CPU').show();

			$('#Serial_CPU').show();

			$('#Modelo_Mon').show();

			$('#Serial_Monitor').show();

            

        }

    });

});



  1. En el archivo de la vista agregue la siguiente linea:



Yii::app()->clientScript->registerScriptFile(Yii::app()->request->baseUrl . '/js/cambio.js', CClientScript::POS_END);

  1. Y en el _form esta así:

    


<div id="Tipo"class="row">    

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

         <?php echo $form->dropDownList($model,'Tipo',$model->getAllTipo());?> 

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

    </div>

	

	<div id="Modelo"class="row">    

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

         <?php echo $form->dropDownList($model,'Tipo',$model->getAllTipo());?> 

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

    </div>


	<div  id="Serial" class="row">      

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

         <?php echo $form->textField($model,'Serial',array('size'=>30,'maxlength'=>45));?>  

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

    </div>

	

	<div id="Modelo_CPU"class="row">    

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

         <?php echo $form->dropDownList($model,'Tipo',$model->getAllTipo());?> 

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

    </div>

	

	<div id="Modelo_Mon"class="row">    

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

         <?php echo $form->dropDownList($model,'Tipo',$model->getAllTipo());?> 

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

    </div>

    

    <div  id = "Serial_CPU" class="row">      

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

         <?php echo $form->textField($model,'Serial_CPU',array('size'=>30,'maxlength'=>45));?>  

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

    </div>

    

    <div  id = "Serial_Monitor" class="row">      

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

         <?php echo $form->textField($model,'Serial_Monitor',array('size'=>30,'maxlength'=>45));?> 

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

    </div>



Hasta acá funciona ocultando y mostrando los campos según lo que se escoja en el droplist

Quedo atenta a comentarios.

Hola , Estoy intentando usar el mismo código que ustedes explican y usaron con éxito.

Estos fueron los pasos:

  1. JS

$(document).ready(function(){

    &#036;('#TiempoContratacion').hide();


    &#036;('#TipoContratacionID').show();


    


&#036;(&quot;select[name='Requisicion&#092;&#092;[TipoContratacionID&#092;&#092;]']&quot;).change(function(){


    if (&#036;(this).val()== 1) { // No muestra MESES


                    


                    &#036;('#TiempoContratacion').hide();


                   


    }


    if  (&#036;(this).val()&#33;= 1) { // Muestra los campos de escritorio y oculta el de portatil


        &#036;('#Serial').hide();


                 &#036;('#TiempoContratacion').show();


        


    }


});

});

  1. Adicione la linea en la vista.

Pero mi _form no hace la funcionalidad deseada.

Me pueden ayudar.

Desde ya gracias por sus comentarios.

Hola… siento la demora en contestar estuve un poco desconectada.

Por favor si todavía necesita ayuda avísame gracias.