Yii Framework Forum: Combos Dependientes Estado>Municipio>Parroquia - Yii Framework Forum

Jump to content

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

Combos Dependientes Estado>Municipio>Parroquia Halp :( Rate Topic: -----

#1 User is offline   wasakaca2 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 68
  • Joined: 27-May 14

Posted 11 June 2014 - 02:51 PM

Buenos dias, tengo varios dias intentando hacer unos combos dependientes y queria ver si me podian ayudar. pues aqui la cuestion.
Mis tablas son:
_____________
tbl_estado
id (PK)
estado
_____________
tbl_municipio
id (PK)
idestado(FK)
municipio
_____________
tbl_Parroquia
id (PK)
idmunicipio (FK)
parroquia
_____________

La tabla que necesito que tenga la ubicacion se llama tbl_estructura y en ella tengo almacenado solo el id de la parroquia, ya que con el se puede saber todo lo demas.
_____________
tbl_estructura
id
idparroquia
denominacion
______________

Una vez sabiendo eso tengo mi _Form para crear un nuevo organismo en el mismo tengo este codigo, hasta ahora solo he trabajado en la relacion Estado-Municipio que obviamente no he podido realizar. en el form_ tengo esto

<div class="row">
		<?php echo $form->labelEx($model,'idestado'); ?>
		<?php echo $form->dropDownList($model,'id', //idestado
		CHtml::listData(TblEstado::model()->findAll(),'id','estado'),
			array(
				'ajax'=>array(
					'type'=>'POST',
					'url'=>CController::createUrl('TblEstructura/Selectestado'),
					'update'=>'#'.CHtml::activeId($model,'municipio'),
					),
				)
			//CHtml::listData(TblEstado::model()->findAll(),'id','estado')
		); ?>
		<!-- <?php echo $form->error($model,'idestado'); ?>  No tienen Error porque no son necesario-->
	</div>
	
	
	<div class="row">
		<?php echo $form->labelEx($model,'municipio'); ?>
		<?php echo $form->dropDownList($model,'id',
			CHtml::listData(TblMunicipio::model()->findAll(),'id','municipio')
		); ?> 
	</div>
	<div class="row">
		<?php echo $form->labelEx($model,'idparroquia'); ?>
		<?php echo $form->dropDownList($model,'idparroquia',
			CHtml::listData(TblParroquia::model()->findAll(),'id','parroquia')
		); ?> 
		<?php echo $form->error($model,'idparroquia'); ?>
	</div>



en el modelo tengo la funcion Selectestado asi:

public function actionSelectestado() 
	{

		$id_uno = $_POST ['TblEstructura']['id'];
		$lista = TblMunicipio::model()->findAll('id = :id_uno',array(':id_uno'=>$id_uno));
		$lista = CHtml::listData($lista, 'id', 'municipio');

		foreach ($lista as $valor => $municipio) {
			echo CHtml::tag('option',array('value'=>$valor),CHtml::encode($municipio),true);
		}

	}


Todo lo hice siguiendo un tutorial bastante bueno de youtube.
https://www.youtube....h?v=NZDpTHtRp1s

cambie algunas cosas ya que la relacion que muestran en el video no igual a la mia. la cuestion esta en que no me actualiza el combo de municipio. obviamente estoy haciendo algo mal, pero no se que es.. agradeceria cualquier ayuda.

Cabe destacar que los id(PK) se llaman igual en todas las tablas y por peticion de el DBA no puedo cambiarlas. estoy realmente desesperado ya. necesito ayuda T_T
0

#2 User is offline   a18327 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 71
  • Joined: 14-August 13
  • Location:México

Posted 11 June 2014 - 07:48 PM

Cambia esto en el _form

<div class="row">
	<?php echo $form->labelEx($model,'municipio'); ?>
        <?php echo $form->dropDownList($model,'id',
        	CHtml::listData(TblMunicipio::model()->findAll(),'id','municipio')
        ); ?> 
</div>

Por esto

<div class="row">
	<?php echo $form->labelEx($model,'municipio'); ?>
        <?php echo $form->dropDownList($model,'municipio',//<----El cambio aquí
        	CHtml::listData(TblMunicipio::model()->findAll(),'id','municipio')
        ); ?> 
</div>

1

#3 User is offline   Daniel Galvan 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 83
  • Joined: 04-March 12
  • Location:Mexico

Posted 11 June 2014 - 10:15 PM

Suponiendo que tu modelo (TblEstructura) tiene las siguientes propiedades:
class TblEstructura extends CActiveRecord {
    public $idestado;
    public $idmunicipio;
    .
    .
    .
    .
}


Y que tu controlador tiene:
class TblEstructuraController extends Controller {
    public function accessRules() {
        return array(
            array('allow',
                'actions'=>array('index','view', 'selectParroquia', 'selectMunicipio'),
                'users'=>array('*'),
            ),
            .
            .
            .
        )
    }

    public function actionCreate() {
        $model=new TblEstructura;
        // importante
        $estadoListData = CHtml::listData(TblEstado::model()->findAll(), 'id', 'estado');

        if(isset($_POST['TblEstructura'])) {
                $model->attributes=$_POST['TblEstructura'];
                if($model->save())
                        $this->redirect(array('view', 'id'=>$model->id));
        }

        // importante
        $this->render('create',array(
            'model'=>$model,
            'estadoListData'=>$estadoListData
        ));
    }

    public function actionSelectMunicipio() {
        $id = (int) $_POST ['TblEstructura']['idestado'];
         $lista = CHtml::listData(TblMunicipio::model()->findAll('idestado =:id', array(':id'=>$id)), 'id', 'municipio');

         echo CHtml::tag('option', array('value'=>''), '-- Seleccione Municipio --', true);

        foreach ($lista as $valor=>$municipio) {
            echo CHtml::tag('option', array('value'=>$valor), CHtml::encode($municipio), true);
        }
    }

    public function actionSelectParroquia() {
        $id = (int) $_POST ['TblEstructura']['idmunicipio'];
        $lista = CHtml::listData(TblParroquia::model()->findAll('idmunicipio =:id', array(':id'=>$id)), 'id', 'parroquia');

        echo CHtml::tag('option', array('value'=>''), '-- Seleccione Parroquia --', true);

        foreach ($lista as $valor => $parroquia) {
            echo CHtml::tag('option', array('value'=>$valor), CHtml::encode($parroquia), true);
        }
    }

    .
    .
    .
}


Una modificacion a tu vista create (para enviar los datos de ESTADO desde el CONTROLLER [actionCreate]):
<?php $this->renderPartial('_form', array('model'=>$model, 'estadoListData'=>$estadoListData)); ?>


Tu vista _form deberia lucir algo como:
    <div class="row">
        <?php echo $form->labelEx($model,'idestado'); ?>
        <?php
        echo $form->dropDownList($model, 'idestado', $estadoListData, array(
            'ajax'=>array(
                'type'=>'POST',
                'url'=>$this->createUrl('selectMunicipio'),
                'update'=>'#' . CHtml::activeId($model, 'idmunicipio')
            ), 'prompt'=>'-- Selecciona Estado --'
        ));
        ?>
        <?php echo $form->error($model,'idestado'); ?>
    </div>
    <div class="row">
        <?php echo $form->labelEx($model, 'idmunicipio'); ?>
        <?php
        echo $form->dropDownList($model, 'idmunicipio', array(), array(
            'ajax'=>array(
                'type'=>'POST',
                'url'=>$this->createUrl('selectParroquia'),
                'update'=>'#' . CHtml::activeId($model, 'idparroquia')
            ), 'prompt'=>'-- Selecciona Municipio --'
        ));
        ?>
        <?php echo $form->error($model, 'idmunicipio'); ?>
    </div>
    <div class="row">
        <?php echo $form->labelEx($model,'idparroquia'); ?>
        <?php echo $form->dropDownList($model, 'idparroquia', array(), array('prompt'=>'-- Selecciona Parroquia --')); ?>
        <?php echo $form->error($model,'idparroquia'); ?>
    </div>


Espero te sirva, saludos

B)

This post has been edited by Daniel Galvan: 11 June 2014 - 10:23 PM

If my post was useful, Would you might give a vote +? / Si mi mensaje fue útil, ¿Le podrías dar un voto +?

Thanks / Gracias
1

#4 User is offline   wasakaca2 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 68
  • Joined: 27-May 14

Posted 18 June 2014 - 09:00 AM

 Daniel Galvan, on 11 June 2014 - 10:15 PM, said:

Daniel Galvan

Muchas gracias, antes de haber visto tu post lo hice por mi cuenta. y creo que salio bien. fijate como quedó y si ves algo que deba corregir lo agradezco mucho. tambien lo dejo por si alguien lo necesita. :)


_form.php
<!-- ************************************************************************************************ -->
<!-- ************************************************************************************************ -->
<!-- ************************************************************************************************ -->
	<div class="row">
		<?php echo $form->labelEx($model,'Estado'); ?>
		<?php echo $form->dropDownList(TblEstado::model(),'id',
			CHtml::listData(TblEstado::model()->findAll(),'id','estado'),
			array(
                    'ajax' => array(
                    'type' => 'POST',
                    'url' => CController::createUrl('TblEstructura/Selectmunicipio'),
                    'update' => '#'.CHtml::activeId(TblMunicipio::model(),'id'),
                    'beforeSend' => 'function(){
                    	$("#TblEstructura_idparroquia").find("option").remove();
                    	}',
                  //$("#TblMunicipio_id").find("option").remove();
                ),'prompt' => 'Seleccione un Estado...'
            )
		); ?>
	</div>

	<div class="row">
	    <?php echo $form->labelEx($model,'Municipio'); ?>
	    <?php echo $form->dropDownList(TblMunicipio::model(),'id',
	      CHtml::listData(TblMunicipio::model()->findAll(),'id','municipio'),
	      array(
	          'ajax' => array(
	                    'type' => 'POST',
	                    'url' => CController::createUrl('TblEstructura/Selectparroquia'),
	                    'update' => '#'.CHtml::activeId($model,'idparroquia'), 
	                ),'prompt' => 'Seleccione un Municipio...'
	          )
	    ); ?>
	    
  </div>


	<div class="row">
		<?php echo $form->labelEx($model,'Parroquia'); ?>
    	<?php echo $form->dropDownList($model,'idparroquia',array(
    	'prompt' => 'Seleccione un Parroquia...'
    	)
    	); ?>
    	<?php echo $form->error($model,'idparroquia'); ?>
	</div>


<!-- ************************************************************************************************ -->
<!-- ************************************************************************************************ -->
<!-- ************************************************************************************************ -->



TblEstructuraController.php
public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view','SelectMunicipio','Selectparroquia'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

public function actionSelectmunicipio()
	{
		 $id_uno= $_POST['TblEstado']['id']; 
	     $lista = TblMunicipio::model()->findAll('idestado = :id_uno',array(':id_uno' => $id_uno));
	     $lista = CHtml::listData($lista, 'id', 'municipio');

	   		echo CHtml::tag('option',array('value' => ''),'Seleccione un Municipio...',true);
	            foreach($lista as $valor => $municipio)
            {
                echo CHtml::tag('option',array('value' => $valor),CHtml::encode($municipio), true);
            }

	}

	public function actionSelectparroquia()
	{
		 $id_dos= $_POST['TblMunicipio']['id']; 
	    //$lista2 = TblParroquia::model()->findAll('idmunicipio = :id_dos',array(':id_dos' => $id_dos));
	     $lista2 = TblParroquia::model()->findAll('idmunicipio = :id_dos',array(':id_dos' => $id_dos));
	     $lista2 = CHtml::listData($lista2, 'id', 'parroquia');

	   		echo CHtml::tag('option',array('value' => ''),'Seleccione un Parroquia...',true);
	            foreach($lista2 as $valor2 => $parroquia)
            {
                echo CHtml::tag('option',array('value' => $valor2),CHtml::encode($parroquia), true);
            }

	}

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