[РЕШЕНО] Ajax форма составления ссылки

Главные вкладки

Аватар пользователя Buratino Buratino 23 марта 2017 в 19:10

Доброго времени суток всем. Есть ajax с 2-мя селект листами. Составляем возможные языковые пары. В первом выбираем язык, во втором подтягиваеться возможный парный язык. Эта часть работает отлично, дальше нужно состовлять ссылку на страницу. Вот тут и появляются проблемы. Генерируется вторая ссылка, вместо замены пердыдущей. Подскажите пожалуйста как пофиксать.

function my_select_language_pairs_form($form, &$form_state) {

$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'];
}

ВложениеРазмер
Иконка изображения selection_031.png37.38 КБ

Лучший ответ

Аватар пользователя Buratino Buratino 24 марта 2017 в 13:56

Решил проблему. Всем спасибо.

В одном callbacke можно вернуть несколько элеементов таким способом

function form_ajax_get_target($form, $form_state) {

  $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,
  );
}

Комментарии

Аватар пользователя Buratino Buratino 23 марта 2017 в 19:12

Может можно сделить в callback что именно сейчас мы дернули ( source_languages или target_languages) И в зависимости от этого менять return $form['ajax']['target_languages']; или $form['ajax']['lang_pairs_link']; напрямую.

Аватар пользователя Buratino Buratino 24 марта 2017 в 13:56

Решил проблему. Всем спасибо.

В одном callbacke можно вернуть несколько элеементов таким способом

function form_ajax_get_target($form, $form_state) {

  $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,
  );
}