Fieldsets

Drupal 6, 7.

Fieldsets worden gebruikt om een blok open en dicht te kunnen laten klappen. Dit kan gebruikt worden zowel in de aanmaak van een formulier als een ander soort tekst op een pagina. Bij gebruik in een formulier, dat via de functie drupal_get_form($form_id) wordt aangemaakt, zorgt drupal zelf voor het plaatsen van de juiste jquery module in de header van de webpagina.

Bij gebruik op een andere manier moet in D6 de jquery module via functie drupal_add_js(‘misc/collapse.js’) worden gedefinieerd. In D7 is dat drupal_add_library(‘system’, ‘drupal.collapse’).

In D6 / D7 is de gebruikte code vaak iets als:

$output = '<fieldset><legend>'. t('Titel van de fieldset') ."</legend>\n";
$output .= t('Inhoud van de fieldset');
$output .= "</fieldset>\n";
drupal_add_js('misc/collapse.js');    // D6
//drupal_add_library('system', 'drupal.collapse');    D7

In D7 kan dit simpeler, overzichtelijker en toekomstbestendig met de volgende code:

$fieldset = array(
  '#theme' => 'fieldset',
  '#title' => t('
Titel van de fieldset'),
  '#attributes' => array('class' => array('collapsible', 'collapsed')),
  '#children' => t('Inhoud van de fieldset'),
);
$output = drupal_render($fieldset);

drupal_add_library('system', 'drupal.collapse');

Attentie: Afhankelijk van de plaats van de code moet in D7 de output vaak nog niet gerenderd zijn! Zo moeten onder andere ‘Menu „page callbacks” ’ altijd een te renderen array zijn. Kijk hier voor meer informatie over deze wijziging van D6 naar D7. De code wijzigt dan naar:

$build = array();

$fieldset = array(
  '#theme' => 'fieldset',
  '#title' => t('
Titel van de fieldset'),
  '#attributes' => array('class' => array('collapsible', 'collapsed')),
  '#children' => t('Inhoud van de fieldset'),
);
$build[] = $fieldset;

drupal_add_library('system', 'drupal.collapse');
return $build;