Je me bats vraiment avec ce problème. Eh bien, j'ai une vue, dans cette vue un champ configuré comme texte personnalisé comme lien. Je souhaite ouvrir un formulaire contextuel en cliquant sur le lien. Voici ce que j'ai fait dans la méthode appelée par le lien:
$response = new AjaxResponse();
$title = 'Title for the Popup.';
$form['#attached']['library'][] = 'core/drupal.dialog.ajax';
$response->setAttachments($form['#attached']);
$content = '<div class="test-popup-content">' . 'Content in HTML format' . '</div>';
$options = array(
'dialogClass' => 'popup-dialog-class',
'width' => '75%',
);
$modal = new OpenModalDialogCommand($title, $content, $options);
$response->addCommand($modal);
return $response;
Mais ça ne marche pas du tout! Aidez-moi!
Votre code crée une réponse ajax. Cela ne fonctionne que dans les rappels ajax, nulle part ailleurs.
Si vous souhaitez créer un lien modal, afin qu'il s'ouvre dans une fenêtre contextuelle, vous devez définir la classe use-ajax
et l'attribut data-dialog-type
. Comme dans cet exemple de ConfigSync.php:
$links['view_diff'] = [
'title' => $this->t('View differences'),
'url' => Url::fromRoute($route_name, $route_options),
'attributes' => [
'class' => ['use-ajax'],
'data-dialog-type' => 'modal',
'data-dialog-options' => json_encode([
'width' => 700,
]),
],
];
Pour que les liens modaux fonctionnent, vous devez attacher une bibliothèque, voir Comment créer des fenêtres modales (fenêtres contextuelles)?