Comment faire effondré un jeu de champs personnalisé par défaut dans Drupal 8

12

Dans Drupal 7, il était possible de réduire ou non le jeu de champs et de restreindre l'état par défaut de cet élément de formulaire (réduit ou non réduit). Exemple:

$form['contact_data'] = array(
        '#title' => t("Contact data"),
        '#type' => 'fieldset',
        '#collapsible' => TRUE,
        '#collapsed' => FALSE,
);

Maintenant, dans Drupal 8, je ne trouve pas d'attributs #collapsibleet #collapseddans Drupal\Core\Render\Element\Fieldset. Dans la documentation officielle de l'élément Fieldset n'est mentionné aucun nouvel élément, qui devrait remplacer l'élément Fieldset.

De plus, il n'y a pas de vue d' ensemble des éléments de l'API Form pour Drupal 8, comme pour Drupal 7. Vous devez rechercher manuellement toutes les définitions des éléments de rendu dans le code, ce qui prend plus de temps (surtout lorsque vous souhaitez voir la vue d'ensemble des éléments et les comparer) .

Juraj Nemec
la source

Réponses:

25

Tous les ensembles de champs réductibles ont été remplacés par des éléments de détails HTML5.

Fieldset et legand sont très difficiles à coiffer et il n'est plus recommandé de les utiliser avec Drupal 8. Au lieu de cela, il est remplacé par une méthode plus cross-browser, qui est les balises HTML5 Details & Summary.

'#type' => 'details'

https://www.drupal.org/node/1852020

Drupal 7

$form['advanced'] = array(
  '#type' => 'fieldset',
  '#title' => t('Advanced settings'),
  '#collapsible' => TRUE,
  '#collapsed' => FALSE,
  '#description' => t('Lorem ipsum.'),
);

Drupal 8

$form['advanced'] = array(
  '#type' => 'details',
  '#title' => t('Advanced settings'),
  '#description' => t('Lorem ipsum.'),
  '#open' => TRUE, // Controls the HTML5 'open' attribute. Defaults to FALSE.
);
DRUPWAY
la source
2
Merci pour la réponse. Mais encore une fois, je suis très frustré du fait que ce (pas petit) changement n'est décrit que sur une page "changement d'enregistrement" et n'est pas mis à jour vers les pages de documentation officielle ... Voir: Online documentation: Not done...
Juraj Nemec
1
Les enregistrements de modifications sont l'endroit idéal pour rechercher comment X a changé dans Druapl 8. Ils sont facilement consultables et contiennent toujours des exemples avant / après. Le code et la documentation sont principalement écrits pendant le temps libre des gens. Ne vous plaignez pas, aidez à l'améliorer.
Berdir
@Berdir Oui, je sais que la documentation est écrite par temps libre et je l'apprécie :) Mais personnellement, je ne pense pas que les enregistrements de changement soient facilement consultables (sauf à partir de Google). En tant que développeur, vous recherchez principalement dans la documentation (ou la documentation de l'API), donc une simple référence de lien à un enregistrement de modification spécifique serait suffisante (et cela ne prend pas autant de temps que d'écrire ces exemples dans des enregistrements de modification). En dehors de cela, je dois admettre que les exemples de code dans les enregistrements de changement sont très bons.
Juraj Nemec
Où publiez-vous ce code dans les fichiers drupal 8?
DavSev
0

Exemple utilisant la notation HereDoc pour stocker la description HTML:

$desc_html = <<<HTML
<p>
  <strong>Put the HTML to be displayed when open in here.</strong>
<p>
HTML;

$form['advanced'] = array(
  '#type' => 'details',
  '#title' => t('Advanced settings'),
  '#description' => t($desc_html),
  '#open' => TRUE, // Controls the HTML5 'open' attribute. Defaults to FALSE.
);
Diamondsea
la source