drupal 8 – Mostrar formulario web en modal

Pregunta:

Estoy tratando de mostrar mi formulario web en un modal (incluidos los mensajes de error / validación dentro del modal). Estoy siguiendo este enfoque para un formulario drupal personalizado que no es un formulario web. Me pregunto si esto es posible con los formularios web y, en caso de que lo sea, ¿qué debo tener en cuenta para que se ejecute?

El primer problema que tengo es la siguiente línea de código del TeacherContactController.php del ejemplo

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

Cuando intento usar esto en mi propio controlador, no puedo obtener el espacio de nombres apropiado + id del formulario web. Cuando reviso mi formulario web con desarrollo, dice:

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

Pero obtengo un error "El argumento de formulario Drupal \ webform \ Entity \ Webform \ webform-submit-add_news_webform-form no es un formulario válido". Intenté muchas cosas, pero no lo logré.

¿Cómo puedo obtener el formulario web con formBuilder y qué más me falta aquí (como la configuración de ajax específica del formulario web, etc.)?

Respuesta:

Mostrar una forma de presentación en modal (también podría llamarse ventana emergente) es mucho más simple de lo que pensaba

Supongamos que su formulario web tiene URL /contact , entonces puede crear un enlace de la siguiente manera

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

Al presionar ese enlace, su formulario se abrirá en un modal con validación de error y mensajes dentro del modal

NOTA: Al menos en mi caso también tuve que agregar el siguiente hook_preprocess_page en el archivo .theme

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

Algunas personas han informado que esto no es necesario, pero supongo que algún otro módulo incluyó esta biblioteca para ellos …

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım