Loading



 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
dropdownlist dependiente post
28-01-2013, 02:39 PM
Mensaje: #1
dropdownlist dependiente post

Tengo un problema con combos dependientes, el combo municipios se tiene que llenar a partir de la opción seleccionada en el combo departamentos, utilizo ajax y me guie con este tutorial: http://www.yiiframework.com/wiki/24/


Código:
// CODIGO EN EL VIEW


$form=$this->beginWidget('CActiveForm', array(
    'id'=>'ciudadano-cedula-form',
    'enableAjaxValidation'=>false,
));



// Primer  Combo (Departamentos)
echo $form->dropDownList($model,'depto_nacimiento_cod',CHtml::listData(Departamento::mode​l()->findAll(),'id_depto','descripcion'),
                                            //array('empty'=>''),
                                            array(
                                            'ajax'=>array(
                                                        'type'=>'POST',
                                                        'url'=>CController::createUrl('CiudadanoCedula/Municipios'),
                                                        'update'=>'#'.CHtml::activeId($model,'munic_nacimiento_cod'),
                                                        )
                                                )
                                            );

Donde CiudadanoCedula es el nombre de mi controlador y Municipios la action.


// Segundo Combo (Municipios)
    echo $form->dropDownList($model,'munic_nacimiento_cod',array());


// CODIGO EN EL CONTROLADOR
    public function actionMunicipios()
    {
                $id_depto = $_POST['CiudadanoCedula']['depto_nacimiento_cod']; // AQUI NO TRAE NADA CUANDO SELECCIONO EL PRIMER COMBO.
        $data=Municipio::model()->findAll('id_depto=:id_depto',
            array(':id_depto'=> $id_depto));

        $data=CHtml::listData($data,'id_depto_muni','descripcion');
        foreach($data as $value=>$municipio)  {
            echo CHtml::tag('option',
               array('value'=>$value),CHtml::encode($municipio),true);
        }
    
        
    }


Haciendo unas pruebas me tope con que si escribo en la función del controlador un valor a $id_depto = 4; cuando hago el cambio en el combo de departamentos si me despliega resultados en el combo de municipios.


Pero cuando dejo esta linea $id_depto = $_POST['CiudadanoCedula']['depto_nacimiento_cod'];
No sé por qué no trae nada en esta linea de código, no sé si hay otra forma de verificar si estoy haciendo bien la llamada por medio de POST.


He consultado también otros foros http://www.yiiframework.com/forum/index....own-lists/
y en este tienen la misma solución que la que implemente pero en mi caso no funciona.


Si alguien tiene alguna idea, se los agradezco de antemano.

QUOTE
28-01-2013, 04:30 PM
Mensaje: #2
RE: dropdownlist dependiente post

Videotutorial YII Framework - DropDownLists Dependientes Varios Niveles HD
https://www.youtube.com/watch?v=NZDpTHtRp1s


En este Videotutorial se explica como desarrollar un DropDownList (Select) dependiente de 2 y 3 Niveles utilizando Yii Framework. Hecho por Mi


Link para descargar el Codigo: http://www.mediafire.com/?745p7k6w28605dp

QUOTE
29-01-2013, 01:45 PM
Mensaje: #3
RE: dropdownlist dependiente post

Gracias por tu respuesta, ya había visto anteriormente tu vídeo e incluso volví a generar una aplicación empezando desde cero para poder probar lo que en tu vídeo muestras y me funciona bien, pero en mi aplicación real cuando trato de poner el código para darle funcionalidad a mis combos no funciona.


Aquí está el código que hice para los primeros 2 combos que es lo que necesito, pero no aparece nada en el segundo combo cuando selecciono el primero. Me vuelve a pasar lo que dije en mi primera explicación, si pongo hardcode $id_uno= 3; me llena el segundo combo cuando selecciono algún valor del primero pero si dejo la linea $id_uno = $_POST['CiudadanoCedula']['depto_nacimiento_cod']; por alguna razón no me traen ningún valor el POST.


código de mi controlador

Código:
class CiudadanoCedulaController extends Controller
{
    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    //public $layout='//layouts/column2';

    /**
     * @return array action filters
     */
    public function filters()
    {
        return array(
            'accessControl', // perform access control for CRUD operations
            'postOnly + delete', // we only allow deletion via POST request
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index','view','municipios'),
                '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('*'),
            ),*/
        );
    }

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id)
    {
        $this->render('view',array(
            'model'=>$this->loadModel($id),
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $model=new CiudadanoCedula;

        // Uncomment the following line if AJAX validation is needed
         //$this->performAjaxValidation($model);

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

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

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id)
    {
        $model=$this->loadModel($id);

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

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

        $this->render('update',array(
            'model'=>$model,
        ));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id)
    {
        $this->loadModel($id)->delete();

        // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
        if(!isset($_GET['ajax']))
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
    }

    /**
     * Lists all models.
     */
    public function actionIndex()
    {
        $dataProvider=new CActiveDataProvider('CiudadanoCedula');
        $this->render('index',array(
            'dataProvider'=>$dataProvider,
        ));
    }

    /**
     * Manages all models.
     */
    public function actionAdmin()
    {
        $model=new CiudadanoCedula('search');
        $model->unsetAttributes();  // clear any default values
        if(isset($_GET['CiudadanoCedula']))
            $model->attributes=$_GET['CiudadanoCedula'];

        $this->render('admin',array(
            'model'=>$model,
        ));
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($id)
    {
        $model=CiudadanoCedula::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model)
    {
        if(isset($_POST['ajax']) && $_POST['ajax']==='ciudadano-cedula-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
    public function actionMunicipios()
    {
        $id_uno = $_POST['CiudadanoCedula']['depto_nacimiento_cod'];
        //$id_uno = 3;
        $lista = RenapMunicipio::model()->findAll('id_depto = :id_uno',array(':id_uno'=>$id_uno));
        $lista = CHtml::listData($lista,'id_depto_muni','descripcion');

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

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

        }

    }
    

}


Código en _form


Código:
<?php
/* @var $this CiudadanoCedulaController */
/* @var $model CiudadanoCedula */
/* @var $form CActiveForm */
?>

<div class="form">

<?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'ciudadano-cedula-form',
'enableAjaxValidation'=>false,
));

?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>


    <table>
    <tr>
        <td colspan="6"><h5>Datos Ciudadano </h5></td>
    </tr>
    <tr>
        <td>
            <?php
            
            echo $form->dropDownList($model,'depto_nacimiento_cod',CHtml::listData(RenapDepartamento:​:model()->findAll(),'id_depto','descripcion'),
            //array('empty'=>''),
            array(
            'prompt'=>'Seleccionar',
            'ajax'=>array(
                        'type'=>'POST',
                        'url'=>CController::createUrl('Ciudadanocedula/Municipios'),
                        'update'=>'#'.CHtml::activeId($model,'munic_nacimiento_cod'),
                        )
                )
            );

            echo $form->error($model,'depto_nacimiento_cod'); ?>
        </td>
        <td>
            <?php echo $form->dropDownList($model,'munic_nacimiento_cod',array());?>
            <?php echo $form->error($model,'munic_nacimiento_cod'); ?>
        </td>
    </tr>
    </table>
    <table>
    <tr>
        <td colspan="6" style="text-align: center">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Guardar' : 'Save'); ?>
        </td>
    </tr>
    </table>

    <div class="row buttons">
        <?php //echo CHtml::submitButton($model->isNewRecord ? 'GUARDAR' : 'Save'); ?>
    </div>


<?php $this->endWidget(); ?>

</div><!-- form -->


En tu vídeo se explica todo muy bien, pero no se porque razón en mi aplicación no funciona. Podrías decirme si miras en mi código algo mal por favor.

QUOTE


Posibles temas similares...
Tema: Autor Respuestas: Vistas: Último mensaje
  [SOLUCIONADO] Enviar como parametro seleccion de dropdownlist emontufar 2 1,835 04-12-2014 04:09 PM
Último mensaje: jorge_cornejo
  Completar textfield con ajax en base a seleccion de dropdownlist jorge_cornejo 0 63 04-12-2014 03:02 PM
Último mensaje: jorge_cornejo
  Completar textfield con ajax en base a seleccion de dropdownlist jorge_cornejo 0 79 04-12-2014 02:26 PM
Último mensaje: jorge_cornejo
Arcoiris a partir de un Dropdownlist esthervictoria 1 119 24-11-2014 04:42 PM
Último mensaje: danefrcf
  a partir de un Dropdownlist esthervictoria 0 82 24-11-2014 11:23 AM
Último mensaje: esthervictoria
  Llena textField desde dropDownList con ajax nestor_yii 2 944 05-08-2014 04:30 PM
Último mensaje: bluyell
  Como cargar en un DropDownlist los datos de el usuario que esta logueado Katherine 5 1,007 05-08-2014 09:20 AM
Último mensaje: Katherine
  Ocultar textbox según valor dropdownlist Claudio 0 577 30-05-2014 11:12 AM
Último mensaje: Claudio
  Ocultar/mostrar un dropDownList Lemadedi 0 729 09-05-2014 09:25 AM
Último mensaje: Lemadedi
Información Problema con combobox dependiente de una tabla de BD leidy2201 2 1,032 23-04-2014 12:35 PM
Último mensaje: leidy2201

Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Yii Framework en Español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS