Рейтинг:-1

Пользовательский обратный вызов drupal в форме редактирования узла не срабатывает

флаг eg

я новичок в drupal, у меня есть пользовательская кнопка, добавленная на одну страницу редактирования типа контента, когда я нажимаю на эту кнопку, я хочу вызвать функцию, но кажется, что она не вызывает функцию, когда я вижу консоль, я вижу drupa ajax ошибка возникает всякий раз, когда я нажимаю кнопку. пожалуйста, дайте мне знать, что я делаю неправильно здесь.

функция mymodule_form_node_program_edit_form_alter(&$form, FormStateInterface $form_state) {
  $ форма ['применить'] = массив (
    '#type' => 'отправить',
    '#value' => t('Применить'),
    '#вес' => '9',
    '#executes_submit_callback' => ЛОЖЬ,
    '#limit_validation_errors' => массив(),
    '#ajax' => массив(
      'обратный вызов' => 'button_test_callback',
    ),
  );
}
    функция button_test_callback (массив и форма $, \Drupal\Core\Form\FormStateInterface $form_state) {
  echo '<script>оповещение("Добро пожаловать")</script>';
  вернуть $ форму;
}

ошибка, которую я получаю:

Непойманный Drupal.AjaxError {сообщение: "\nПроизошла ошибка HTTP AJAX.\nКод результата HTTP: 50***\Core\DrupalKernel->handle(Object) (строка: 19)\n", name: "AjaxError"} сообщение: "\nПроизошла ошибка HTTP AJAX.\nКод результата HTTP: 500\nСледует информация об отладке.\nПуть: /node/680911/edit?destination=/admin/content&ajax_form=1\nStatusText: error\nResponseText: Веб-сайт обнаружил непредвиденная ошибка. Повторите попытку позже. Symfony\Component\HttpKernel\Exception\HttpException: указанный обратный вызов #ajax пуст или не может быть вызван.в Drupal\Core\Form\FormAjaxResponseBuilder->buildResponse() (строка 67 core/lib/Drupal/Core/Form/FormAjaxResponseBuilder.php). Drupal\Core\Form\EventSubscriber\FormAjaxSubscriber->onException(Object, 'kernel.exception', Object)\ncall_user_func(Array, Object, 'kernel.exception', Object) (строка: 111)\nDrupal\Component\EventDispatcher\ ContainerAwareEventDispatcher->dispatch('kernel.exception', Object) (строка: 227)\nSymfony\Component\HttpKernel\HttpKernel->handleException(Object, Object, 1) (строка: 79)\nSymfony\Component\HttpKernel\HttpKernel- >handle(Object, 1, 1) (строка: 67)\nDrupal\simple_oauth\HttpMiddleware\BasicAuthSwap->handle(Object, 1, 1) (строка: 57)\nDrupal\Core\StackMiddleware\Session->handle(Object , 1, 1) (Строка: 47)\nDrupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Строка: 106)\nDrupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1 ) (Строка: 85)\nDrupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Строка: 49)\nAsm89\Stack\Cors->handle(Object, 1, 1) (Строка: 50) \nDrupal\ban\BanMiddleware->handle(Object, 1, 1) (строка: 47)\nDrupal\Core\StackMiddleware\ReverseProxyMiddleware->han dle(Object, 1, 1) (строка: 52)\nDrupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (строка: 23)\nStack\StackedHttpKernel->handle(Object, 1, 1) (Строка: 708)\nDrupal\Core\DrupalKernel->handle(Object) (Строка: 19)\n"

Рейтинг:0
флаг de

Вы используете определение обратного вызова D7. Его нужно определить как обратный вызов D8+. Итак, это:

функция button_test_callback($form, &$form_state) {

Должно быть так:

функция button_test_callback (массив и форма $, \Drupal\Core\Form\FormStateInterface $form_state) {
vyshnavi avatar
флаг eg
я перехожу на это, все еще получая ту же ошибку, кажется, что функция button_test_callback не вызывается
Jaypan avatar
флаг de
Я обновил код, в нем отсутствовала косая черта, поэтому вам следует попробовать обновленный код. Кроме того, в каком файле находится `button_test_callback()`?
vyshnavi avatar
флаг eg
он все еще не работает, button_test_callback находится в том же файле. я хочу изменить значение поля узла, когда я нажимаю настраиваемую кнопку в форме редактирования узла, не отправляя форму редактирования узла
Jaypan avatar
флаг de
"в том же файле"
vyshnavi avatar
флаг eg
это файл пользовательского модуля, course_program.module
Jaypan avatar
флаг de
Хорошо, тогда это должно сработать. Пожалуйста, обновите исходный пост, чтобы показать ваш текущий код.
vyshnavi avatar
флаг eg
я обновил код, я получаю Uncaught Drupal.AjaxError, как я уже упоминал в вопросе, всякий раз, когда я нажимаю кнопку.
Jaypan avatar
флаг de
Если это ваш текущий код, вам нужно вернуть значение из обратного вызова ajax.
vyshnavi avatar
флаг eg
можешь привести пример?
Jaypan avatar
флаг de
Чтобы проверить, добавьте `return $form;` к обратному вызову ajax.
vyshnavi avatar
флаг eg
я добавил форму возврата $ и также обновил код в вопросе, но все еще не запускаю функцию, я все еще получаю ошибку ajax в консоли
Jaypan avatar
флаг de
Этот вызов `echo` может вызывать у вас проблемы. Вы пробовали без этого?
vyshnavi avatar
флаг eg
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/128913/discussion-between-vyshnavi-and-jaypan).
vyshnavi avatar
флаг eg
привет, jaypan, после удаления эха ошибка не появляется но я хочу изменить значение поля $form['field_text_plain']['widget'][0]['value']['#value'] = '75433g'; но это не показывает мне нужно отправить значение взамен?
Jaypan avatar
флаг de
Добро пожаловать на Drupal Answers — это сайт формата «один вопрос — один ответ». Вопрос о вашем пустом обратном вызове был решен, и поэтому вопрос, который вы только что задали, является новым вопросом. Пожалуйста, отметьте этот вопрос как решенный, а затем откройте новую тему для этой проблемы.
vyshnavi avatar
флаг eg
о, конечно, спасибо за помощь :)

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

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