Hola, había publicado antes en el foro pero al parecer lo hice en una sección equivocada y borraron mi Topic. Bueno, procedo a describir mi problema. Estoy creando una aplicación, en la cual uno de sus módulos se encarga del registro de estudiantes. El proceso de registro tiene en uno de sus pasos la selección de la ubicación del usuario (quizá ya sepan a donde quiero llegar). La ubicación se compone de tres tablas, una que contiene paises, otra que contiene provincias y otra que contiene localidades. El hecho es que el formulario de carga le pide al estudiante que escoja una localidad, pero como se podrán imaginar, para listar las localidades necesito primero seleccionar la provincia, para lo cual previamente necesito a su vez, seleccionar un país. Siguiendo esta guía Yii 1.1: Creating a dependent dropdown traté de replicar la estructura en mi aplicación, pero no he podido lograr que funcione, la carga del primer dropdown con los paises funciona perfectamente pero al querer cargar el dropdown con las provincias no funciona. He de admitir que soy un novato en el uso del framework y en PHP, por lo cual es probable que algo se me haya pasado por alto.
He aquí el código que uso en la vista:
<div class="row">
<?php echo CHtml::label('Pais','paises_id',array ('required'=>true));?>
<?php
$pmodels = Paises::model()->findAll();
$data = array();
foreach ($pmodels as $m)
$data[$m->id] = $m->nombre;
echo CHtml::dropDownList('paises_id', '', $data ,
array(
'empty' => 'Seleccione su pais de procedencia',
'ajax' => array(
'type'=>'POST',
'url'=>CController::createUrl('estudiantes/cargarprovincias'),
'update'=>'#Paises_provincias_id',
//'success' => 'function(data){$("select#provincias_id").html(data);}',
//'data' => array('paises_id' => 'js:$(this).val()')
)
)
);
?>
</div>
<div class="row">
<?php echo CHtml::label('Provincia','provincias_id',array ('required'=>true));?>
<?php echo CHtml::dropDownList('provincias_id','', array(), array('empty' => 'Seleccione su provincia de procedencia'),
array(
'ajax' => array(
'type'=>'POST',
'url'=>CController::createUrl('estudiantes/cargarlocalidades'), //url to call.
'update'=>'#'.CHtml::activeId($model,'local_id'), //selector to update
//'success' => 'function(data){$("select#local_id").html(data);}',
//'data' => array('provincias_id' => 'js:$(this).val()')
)
)
);
?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'local_id'); ?>
<?php echo CHtml::dropDownList('local_id','', array(),array('empty' => 'Seleccione su localidad de procedencia'));?>
<?php echo $form->error($model,'local_id'); ?>
</div>
Y aquí el controlador:
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view','cargarprovincias','cargarlocalidades'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update','cargarprovincias','cargarlocalidades'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete','cargarprovincias','cargarlocalidades'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
public function actionCargarprovincias()
{
$data=Provincias::model()->findAll('parent_id=:parent_id',
array(':parent_id'=>(int) $_POST['paises_id']));
$data=CHtml::listData($data,'id','nombre');
foreach($data as $value=>$nombre)
{
echo CHtml::tag('option',
array('value'=>$value),CHtml::encode($nombre),true);
}
}
public function actionCargarlocalidades()
{
$data=Localidades::model()->findAll('parent_id=:parent_id',
array(':parent_id'=>(int) $_POST['provincias_id']));
$data=CHtml::listData($data,'id','nombre');
foreach($data as $value=>$nombre)
{
echo CHtml::tag('option',
array('value'=>$value),CHtml::encode($nombre),true);
}
}
}
Si alguien me pudiera dar una mano, la verdad es que me he quedado sin ideas, he probado con diferentes variaciones que he encontrado pero ninguna me ha dado resultado hasta ahora. Desde ya muchas gracias.
Saludos.