Доброго времени суток всем. Есть ajax с 2-мя селект листами. Составляем возможные языковые пары. В первом выбираем язык, во втором подтягиваеться возможный парный язык. Эта часть работает отлично, дальше нужно состовлять ссылку на страницу. Вот тут и появляются проблемы. Генерируется вторая ссылка, вместо замены пердыдущей. Подскажите пожалуйста как пофиксать.
$default = !empty($form_state['values']['source_languages']) ? $form_state['values']['source_languages'] : 1;
$form['source_languages'] = array(
'#title' => t('source_languages'),
'#type' => 'select',
'#options' => $source_languages,
'#default_value' => $default,
'#ajax' => array(
'callback' => 'form_ajax_get_target',
'wrapper' => 'form-ajax-lang',
'method' => 'replace',
'effect' => 'fade',
),
);
$source_lang = !empty($form_state['values']['source_languages']) ? $form_state['values']['source_languages'] : 1;
$options = form_ajax_get_available_language($source_lang);
$form['ajax']['target_languages'] = array(
'#type' => 'select',
'#title' => t('target_languages'),
'#options' => $options,
'#prefix' => '<div id = "form-ajax-lang">',
'#suffix' => '</div>',
'#ajax' => array(
'callback' => 'form_ajax_get_target',
'wrapper' => 'form-ajax-lang',
'method' => 'replace',
'effect' => 'fade',
),
);
$source_slug =get_slug(!empty($form_state['values']['source_languages']) ? $form_state['values']['source_languages'] : 1);
$target_slug = get_slug(!empty($form_state['values']['target_languages']) ? $form_state['values']['target_languages'] : 1);
$form['ajax']['lang_pairs_link'] = array(
'#access' => 'link',
'#type' => 'link',
'#title' => $source_slug.'-to-'.$target_slug,
'#href' => '/language-pairs/'.$source_slug.'-to-'.$target_slug,
'#prefix' => '<div id = "form-ajax-lang">',
'#suffix' => '</div>',
);
return $form;
}
function form_ajax_get_target($form, $form_state) {
return $form['ajax'];
}
Вложение | Размер |
---|---|
![]() | 37.38 КБ |
Комментарии
Может можно сделить в callback что именно сейчас мы дернули ( source_languages или target_languages) И в зависимости от этого менять return $form['ajax']['target_languages']; или $form['ajax']['lang_pairs_link']; напрямую.
Решил проблему. Всем спасибо.
В одном callbacke можно вернуть несколько элеементов таким способом
$commands[] = ajax_command_insert('#form-ajax-select', drupal_render($form['target_languages']));
$commands[] = ajax_command_insert('#form-ajax-link', drupal_render($form['lang_pairs_link']));
return array(
'#type' => 'ajax',
'#commands' => $commands,
);
}