Puncte:1

Cum se reîncarcă formularul de semnalizare prin ajax?

drapel in

Sarcina mea este de a ajaxifica formularul de steag complex (cu câmpuri suplimentare). Am nevoie de asta pentru că flagul ajax implicit nu dupport fiedls. Trebuie să am formularul de semnalizare pentru create flag și apoi să-l actualizez când a fost creată semnalizarea.

Vreau să plasez un formular ajaxificat de semnalizare personalizată în șablonul meu Mai întâi primesc formularul:

$term = $variabile['termen'];
$flag = \Drupal::service('flag')->getFlagById('subscribe_term');
$flagging_entity = \Drupal::service('flag')->getFlagging($flag, $variables['term']);

dacă (!$flagging_entity) {
  $flagging_entity = \Drupal::entityTypeManager()->getStorage('flagging')->create([
    'uid' => \Drupal::currentUser()->id(),
    'session_id' => NULL,
    'flag_id' => $flag->id(),
    'entity_id' => $term->id(),
    'entity_type' => $term->getEntityTypeId(),
    'global' => $flag->isGlobal(),
  ]);
}

$form = \Drupal::entityTypeManager()
    ->getFormObject('semnalizare', 'editare')
    ->setEntity($flagging_entity);

$variables['flag'] = \Drupal::formBuilder()->getForm($form);

Formularul merge ok.

Apoi modific anunțul de formular și adaug apel invers ajax:

$form['actions']['submit']['#ajax'] = [
  'callback' => 'mymodule_flag_form_ajax_callback',
  'efect' => 'fade',
];

Și apoi, în apelul ajax, încerc să obțin aceeași formă:

$render_selector = ".flag-form-wrapper";
$răspuns = AjaxResponse nou();
$form_object = $form_state->getFormObject();
$flagging_entity = $form_object->getEntity();

$flagged_entity_field = $flagging_entity->get('flagged_entity')->getValue();

if ($flagged_entity_field) {
  $tid = $flagged_entity_field[0]['target_id'];
  $term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($tid);

  dacă ($term) {
    $flag = \Drupal::service('flag')->getFlagById('subscribe_term');
    $flagging_entity = \Drupal::service('flag')->getFlagging($flag, $term);

    dacă (!$flagging_entity) {
      $flagging_entity = \Drupal::entityTypeManager()->getStorage('flagging')->create([
        'uid' => \Drupal::currentUser()->id(),
        'session_id' => NULL,
        'flag_id' => $flag->id(),
        'entity_id' => $term->id(),
        'entity_type' => $term->getEntityTypeId(),
        'global' => $flag->isGlobal(),
      ]);
    }

    $form_new = \Drupal::entityTypeManager()
        ->getFormObject('semnalizare', 'editare')
        ->setEntity($flagging_entity);
    $form_build = \Drupal::formBuilder()->getForm($form_new);

    $response->addCommand(new HtmlCommand($render_selector, $form_build));
  }
}

dar primesc următoarea excepție: FormAjaxException

Deci, ce fac greșit și cum să reîmprospătează formularul folosind ajax?

Jaypan avatar
drapel de
Nu puteți adăuga elemente de formular într-un apel invers ajax - care ar include un întreg formular. Poate că acest modul poate ajuta: https://www.drupal.org/project/ajaxifyforms

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.