Problemas con la propiedad callback de #ajax en formulario

Events happening in the community are now at Drupal community events on www.drupal.org.
Posted by w4lt3r on May 16, 2012 at 11:32pm

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;
}
?>
Categories:

Spanish

Group organizers

Group notifications

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

AltStyle によって変換されたページ (->オリジナル) /