Рейтинг:0

Как сохранить ajaxified значение в форме

флаг gb

Я добавляю обратный вызов ajax в поле выбора

$form['field_equipe_membre']['виджет']['#ajax'] = массив(
'обратный вызов' => 'ajax_desactive_unites_field_callback',
'событие' => 'изменить',
'метод' => 'html',
'wrapper' => 'edit-field-unite-de-recherche-wrapper',
);

Из поля triggering_element мне удалось получить значение через запрос БД и выбрать его в другом поле выбора.

$trigger = $form_state->getTriggeringElement();
$selected_equipe = $trigger['#value'];
 
$ запрос....

$response = новый AjaxResponse();
$content = '<option value=\"'.$row_unite['nid'].'\" selected=\"selected\">'.$row_unite['title'].'</option>';
$response->addCommand(new AppendCommand('#edit-field-unite-de-recherche', $content));
вернуть $ответ;

Но когда я отправляю форму, выбранное значение обратным вызовом не сохраняется.

Что такое волшебные линии или правильный метод для этого?

я тестировал

$form_state->setRebuild();

в обратном вызове; Я также тестировал

$form_state->setValue('field_unite_de_recherche', $row_unite['nid']);
$form_state->setCached(ИСТИНА);

Я протестировал решение, предложенное где-то на этом форуме, чтобы определить скрытое поле в hook_form_edit_alter.

$form['product_id']['#type']='скрытый';
$form['product_id']['#prefix']='<div id="liberte_pid">';
$form['product_id']['#suffix']='</div>';

и сохранить значение в обратном вызове

$form['product_id']['#value'] = массив(
  $row_unite['нид'],
);

Но ни одно из этих решений не дало решения для меня.

я тоже краснею https://www.drupal.org/project/drupal/issues/2263569 страница, но я не знаю, что с ней делать.

Итак: как сохранить это выбранное значение обратным вызовом ajax?

Jaypan avatar
флаг de
В Drupal вы не можете добавлять элементы формы в Ajax Callback — они будут проигнорированы системой. Они должны быть добавлены в определение формы, которое кэшируется ДО обратного вызова Ajax. См. этот учебник на днях, который показывает пример того, как это сделать: https://www.jaypan.com/tutorial/drupal-form-api-ajax-form-and-results-same-page
cocq avatar
флаг gb
В моем случае я не добавлял элементы формы в свой обратный вызов ajax, я выбираю правильное значение в существующем элементе формы из запроса БД, сам из запроса пользователя. Я внимательно просмотрел вашу ссылку (и я попытался адаптировать свой код из нее), но она закодирована из программирования, построенного из формы. В моем случае это интерактивное здание формы. Итак, в вашем примере я не могу управлять "return $form['search_results'];" в функции "ajaxSubmit". На самом деле, я подозреваю, что управление ajax может осуществляться только из программного здания формы. Я проверю это позже. Итак, спасибо за ссылку.
Jaypan avatar
флаг de
Я вижу, вы добавляете `` в вашем обратном вызове ajax, поэтому вы добавляете элементы в свой обратный вызов ajax. Вы не можете ничего добавить к обратному вызову ajax, в этот момент форма уже кэшируется.
cocq avatar
флаг gb
Извините, но я не добавил значение, это выбор правильного значения в списке выбора. Но учитывая, что "форма уже закэширована на тот момент", нормально, что обновлять выбранный элемент бесполезно!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.