Problemas con la propiedad callback de #ajax en formulario

Events happening in the community are now at Drupal community events on www.drupal.org.
w4lt3r's picture

Hola, antes que nada agradezco cualquier ayuda que me puedan brindar, les presento mi problema:

He creado un bloque de forma programada y le asigno un formulario como contenido, dicho formulario consta de dos selectores, el primer selector contiene a los continentes y el segundo a los países (este último depende del primero) para lograr está dependencia hice uso de la propiedad #ajax pero por alguna razón el segundo selector no se actualiza y no recibo ningún mensaje de error.

A continuación presento el código del bloque:

<?php
/****
* Implementacion de hook_block_info().
*/
function rc_block_info() {
  return array(
   
'rc-form-filter' => array(
     
'info' => t('Contenedor de formulario para filtrado de productos.'),     
    ),
  );
}

/****
* Implementacion de hook_block_view().
*/
function rc_block_view($delta) {
 
$block = array();
 
  if(
$delta == 'rc-form-filter'):
   
$block['subject'] = null;
   
$block['content'] = render(drupal_get_form('rc_form_filter'));
  endif;
 
  return
$block;
}
?>

Y esté es el código del formulario junto con la función callback (rc_form_filter_callback) y las funciones que devuelven los valores para las opciones del select:
<?php
/****
* Retorna una array de paises.
*
* @param $tid
*    Es el identificador del continente del que se quiere obtener los paises.
* @param $vid
*    Es el identificador del del vocabulario que contiene los continentes y paises.
*
* @return
*    Un array cuyas llaves son las tid (taxonomy id) del pais y cuyos valores son los nombres de los paises.
*/
function rc_get_countries($vid, $tid) {
 
$values = array();
 
  if(
$tid != 0):
   
$terms_objs = taxonomy_get_tree($vid, $tid, 1);
   
    foreach(
$terms_objs as $term_obj):
     
$values[$term_obj->tid] = t($term_obj->name);
    endforeach;
  endif;
 
  return
$values;
}

/****
* Retorna una array de continentes.
*
* @return
*    Un array cuyas llaves son las tid (taxonomy id) del continente y cuyos valores son los nombres de los continentes.
*/
function rc_get_continents() {
 
$vocabulary = taxonomy_vocabulary_machine_name_load('continents_countries');
 
$terms_objs = taxonomy_get_tree($vocabulary->vid, 0, 1);
 
$values['vid'] = $vocabulary->vid;
 
  foreach (
$terms_objs as $term_obj):
   
$values['continents'][$term_obj->tid] = t($term_obj->name);
  endforeach;
 
  return
$values;
}

/****
* Callback function for ajax responds
*/
function rc_form_filter_callback($form, &$form_state) {
  return
$form['rc-countries'];
}

/****
* Crea un formulario para filtrar por continentes y paises.
*/
function rc_form_filter($form, &$form_state) {
 
$vocabulary_options = rc_get_continents(); 
 
$default_value      = isset($form_state['values']['rc-continents']) ? $form_state['values']['rc-continents'] : 0;
 
$vocabulary_options['continents'][0] = '';
 
 
$form['rc-continents'] = array(
   
'#type' => 'select',
   
'#prefix' => '<div id="continents">',
   
'#title' => t('Continente:'),
   
'#id' => 'continents',
   
'#options' => $vocabulary_options['continents'],
   
'#default_value' => 0,
   
'#suffix' => '</div>',
   
'#ajax' => array(
     
'event' => 'change',
     
'callback' => 'rc_form_filter_callback',
     
'wrapper' => 'countries-replace',
    ),
  );
 
$form['rc-countries'] = array(
   
'#type' => 'select',
   
'#prefix' => '<div id="countries-replace">',
   
'#id' => 'countries',
   
'#title' => t('Pa&iacute;s'),
   
'#default_value' => '--',
   
'#options' => rc_get_countries($vocabulary_options['vid'], $default_value),
   
'#suffix' => '</div>',
  );
 
  return
$form;
}
?>

Spanish

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: