Formulier sluit automatisch een venster of tabblad

Drupal 7.

Soms is het gewenst om een venster of tabblad automatisch af te sluiten in een PHPmodule. Als dit moet gebeuren in een formulier, moet dit eerst volledig worden afgehandeld voordat het scherm sluit. Een goed werkende methode is het gebruik van een multistep form. In stap 1 wordt het formulier op de dezelfde manier afgehandeld als in een singlestep formulier. In de tweede stap (of in de laatste als een multistep formulier toch al vereist werd) kan het formulier worden afgesloten.

Bij een multistep formulier moeten de verschillende stappen via enkele speciale instructies worden gedefinieerd. Zowel bij de aanmaak van het formulier als bij de afhandeling van de verzending (de submit).

De volgende code is gebaseerd op Drupal 7. Deze kan afwijken van andere versies van Drupal.

Bij het aanmaken voegen we hiervoor de onderstaande code om het formulier af te sluiten. (Bij een meerstapsfomulier is ook code nodig voor het bepalen welke instructies in welke stap uitgevoerd moeten worden.)

  if (isset($form_state['storage']['klaar'])) {
    drupal_add_js('jQuery(document).ready(function () {window.close();})(jQuery);', 'inline');
    $form['result'] = array('#markup' => '');
    return $form;
  }

Onderaan het submit-deel van het formulier komt de volgende code:

  $form_state['rebuild'] = TRUE;
  $form_state['storage']['klaar'] = TRUE;

De „$form_state[‘rebuild’] = TRUE;” geeft aan dat er nog een stap vogt.

In „$form_state[‘storage’][‘klaar’] = TRUE;” wordt informatie opgeslagen die aan het begin van het formulier wordt uitgelezen om te bepalen of het formulier kan worden afgesloten of niet.

That’s all folks!