Рейтинг:-1

Как добавить обратный вызов ajax в элемент формы, созданный в цикле foreach

флаг cn

См. следующий код:

foreach ($formaddresses as $key => $val) {
  // Добавляем кнопки редактирования к пользовательским адресам, созданным на стороне клиента.
  если (!isset($val['номер счета'])) {
    $form['orderinfo']['billshipaddresses']['billingaddresses'][$key]['#description'] = '<a class="edit-stored-address edit-stored-address-target-' . $ ключ . '">Редактировать</a>';
    $form['orderinfo']['billshipaddresses']['shippingaddresses'][$key]['#description'] = '<a class="edit-stored-address edit-stored-address-target-' . $ ключ . '">Редактировать</a>';
  }
}

Здесь этот цикл создает несколько якорей в моей форме. мне просто нужно прикрепить/добавить обратный вызов '#ajax' к этому. Как я могу этого добиться?

Что-то вроде следующего кода:

$form['orderinfo']['billshipaddresses']['shippingaddresses'] = [
  '#type' => 'радио',
  '#title' => 'Адрес доставки',
  '#options' => $formaddressesOptions,
  '#значение_по_умолчанию' => '',
  '#ajax' => [
    'обратный вызов' => '::buildShipBillAddresses',
    'обертка' => 'адреса доставки',
    'событие' => 'изменить'
  ],
];

Здесь мы можем увидеть, изменилось ли указанное выше радио, тогда сработает обратный вызов ajax и вызовет этот метод. buildShipBillAddresses Спасибо!

Рейтинг:1
флаг us

На самом деле элемент привязки, к которому вы хотите добавить обратный вызов AJAX, не является элементом формы. Аякс API страница говорит, как активировать AJAX для ссылки.

Добавьте к ссылке класс use-ajax. Ссылка будет загружена с помощью вызова Ajax. При использовании этого метода href ссылки может содержать «/nojs/» как часть пути. Когда Ajax JavaScript обрабатывает страницу, он преобразует ее в '/ajax/'. После этого сервер может легко определить, был ли этот запрос сделан с помощью фактического запроса Ajax или в ухудшенном состоянии, и ответить соответствующим образом.

Это означает, что для ссылки будет работать следующий код.

foreach ($formaddresses as $key => $val) {
  // Добавляем кнопки редактирования к пользовательским адресам, созданным на стороне клиента.
  если (!isset($val['номер счета'])) {
    $form['orderinfo']['billshipaddresses']['billingaddresses'][$key]['#description'] = '<a href="/nojs/edit-billing-address" class="use-ajax edit -stored-address edit-stored-address-target-' .$key .'">Edit</a>';
    $form['orderinfo']['billshipaddresses']['shippingaddresses'][$key]['#description'] = '<a href="/nojs/edit-shipping-address" class="use-ajax edit -stored-address edit-stored-address-target-' .$key .'">Edit</a>';
  }
}

Модуль должен определить два маршрута для этих ссылок. Я не могу рассказать вам код этих обратных вызовов маршрута, но они должны отображать Редактировать форме, чтобы он отображался в этой форме.

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

На самом деле это не столько вопрос Drupal, сколько вопрос PHP, а ответ на ваш вопрос:

foreach ($formaddresses as $key => $val) {
  // Добавляем кнопки редактирования к пользовательским адресам, созданным на стороне клиента.
  если (!isset($val['номер счета'])) {
    $form['orderinfo']['billshipaddresses']['billingaddresses'][$key]['#ajax'] = [
      'обратный вызов' => '::buildShipBillAddresses',
      'обертка' => 'адреса доставки',
      'событие' => 'изменить'
    ];
  }
}

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

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