Рейтинг:0

Обновить поле тела из обратного вызова ajax

флаг cn

Мне нужно обновить общее поле «тело», когда я изменяю значение некоторых полей абзаца.

Вот мой hook_form_alter:

$form["body"]["#prefix"] = "<div id='body__update_real_time_seo'>";
$form["body"]["#suffix"] = "</div>";

$form["field_content_edito"]["widget"][3]["subform"]["field_paragraph_subtitle"]["widget"][0]["value"]["#ajax"] = [
    "обратный вызов" => "_update_real_time_seo",
    "событие" => "изменение",
    "обертка" => "body__update_real_time_seo",
    "метод" => "заменить",
];

И мой пользовательский обратный вызов:

функция _update_real_time_seo(&$form, FormStateInterface $form_state) {
    $form["body"]["widget"][0]["#default_value"] = "ok";
    возврат $form["тело"];
}

Когда я меняю поле абзаца, я получаю «Пожалуйста, подождите ...», но ничего не происходит, я все еще вижу свое старое значение «ОК». Застрял в этой проблеме несколько часов с многочисленными попытками исправления из stackoverflow.

PS: когда я сбрасываю перед «возвратом», я вижу свое новое значение «ок».

Надеюсь, кто-нибудь может мне помочь. Заранее спасибо.

No Sssweat avatar
флаг ua
Вместо этого попробуйте использовать `#value`.
флаг cn
@NoSssweat После обновления по-прежнему отображается старое значение.
No Sssweat avatar
флаг ua
После запуска ajax какие-либо ошибки JS в консоли браузера?
No Sssweat avatar
флаг ua
В целях отладки, если вы попытаетесь изменить значение тела без ajax, это сработает?
флаг cn
@NoSssweat ничего в консоли. И да, если я изменяю значение тела, то сохраняю, я могу увидеть новое значение после перезагрузки.
berliner avatar
флаг bd
@guish Не уверен, что это ваша проблема, но общий шаблон для AJAX с Form API заключается в том, чтобы (1) построить все в методе сборки формы (в вашем случае изменить форму), (2) использовать функцию обратного вызова AJAX только для возврата конкретная часть формы, которая должна быть заменена с помощью селектора оболочки. Это и `#value` вместо `#default_value` сработало для меня. В качестве альтернативы вы также можете вызвать AjaxResponse (см. https://www.drupal.org/docs/drupal-apis/javascript-api/ajax-forms#s-example-dynamic-textfield). Поле body, потенциально управляемое CKEditor, может еще больше усложнить ситуацию.

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

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