web-dev-qa-db-fra.com

Afficher le formulaire Web dans un modal

J'essaie d'afficher mon formulaire Web dans un modal (y compris les messages d'erreur/de validation à l'intérieur du modal). Je suis ceci approche pour un formulaire drupal form qui n'est pas un formulaire Web. Je me demande si cela est possible avec des formulaires Web et au cas où ce serait le cas Dois-je prendre en compte pour le faire fonctionner?

Le premier problème que je rencontre est la ligne de code suivante de l'exemple de TeacherContactController.php

$modal_form = $this->formBuilder->getForm('Drupal\tl_session\Form\TeacherForm');

Lorsque j'essaie de l'utiliser dans mon propre contrôleur, je ne peux pas obtenir le namespace + id approprié du formulaire Web. Lorsque je vérifie mon formulaire Web avec devel, cela dit:

[__CLASS__] => Drupal\webform\Entity\Webform
  [id] => add_news_webform

Mais j'obtiens une erreur "L'argument de formulaire Drupal\webform\Entity\Webform\webform-submission-add_news_webform-form n'est pas un formulaire valide". J'ai essayé beaucoup de choses, mais sans succès.

Comment puis-je obtenir le formulaire Web avec formBuilder et que manque-t-il d'autre ici (comme les paramètres ajax spécifiques au formulaire Web, etc.)?

3
theuni

C'est beaucoup plus simple que vous ne le pensiez

Supposons que votre formulaire Web possède l'URL /contact que vous pouvez créer un lien de la manière suivante

<a class="use-ajax" data-dialog-type="modal" href="/contact>Contact US</a>

En appuyant sur ce lien, votre formulaire sera ouvert dans un modal avec validation des erreurs et messages à l'intérieur du modal

dans mon cas, je devais également ajouter les éléments suivants hook_preprocess_page dans le .theme fichier

function THEMENAME_preprocess_page(&$vars) {
    //custom logic of when to include the library
    // ....
    $vars['#attached']['library'][] =  'core/drupal.dialog.ajax';  
}

Certaines personnes ont signalé que ce n'est pas nécessaire, mais je suppose qu'un autre module a inclus cette bibliothèque pour eux ...

10
GiorgosK

La seule solution pour charger le formulaire Web avec formBuilder qui a finalement fonctionné pour moi est basée sur ce qui suit documentation sur la façon d'intégrer un formulaire Web. Voici mon code:

/**
* Callback for opening the modal form to create an article.
*
* @return Drupal\Core\Ajax\AjaxResponse
*   A responseObject for Ajax.
*/
public function addArticle() {
  // Get the currently logged in user account.
  $user = $this->currentUser();
  if ($user->hasPermission('create article content')) {
    $response = new AjaxResponse();
    // Load the webform as indicated here:
    // https://www.drupal.org/docs/8/modules/webform/webform-cookbook/how-to-embed-a-webform
    $output['add_form'] = [
      '#type' => 'webform',
      '#webform' => 'add_news_webform',
    ];
    // Add a modal dialog command to the $response object.
    $response->addCommand(new OpenModalDialogCommand(t('Create Article'), $output, ['width' => '500']));
    return $response;
  }
}
2
theuni