J'ai mon formulaire, mais aucun enfant de l'élément "#markup" n'apparaîtra lors du rendu du formulaire.
$form['html'] = array(
'#type' => 'markup',
'#markup' => '<h2>My Heading</h2>',
'#tree' => true,
);
$form['html']['element'] = array(
'#type' => 'textfield',
'#title' => 'Foo',
);
Dans cet exemple, le champ de formulaire "élément" ne sera pas rendu.
Est-ce un bug Drupal, ou dois-je faire quelque chose de spécifique?
Ne pas pouvoir utiliser "#tree" avec un élément "#markup" semble être un bogue de Drupal, car la page de référence pour l'API de formulaire signale que "#tree" est pris en charge par l'élément "#markup" .
Comme solution de contournement, vous pouvez également utiliser la propriété "#prefix", comme dans le code suivant:
$form['html']['element'] = array(
'#type' => 'textfield',
'#title' => 'Foo',
'#prefix' => '<h2>My Heading</h2>',
);
S'il n'est pas rendu comme prévu, vous pouvez simplement supprimer "#tree" de votre code, ce qui ne semble pas être nécessaire, si tout ce que vous voulez est de rendre le <h2>My Heading</h2>
tag avant les champs du formulaire. L'API de formulaire rend les éléments suivant l'ordre dans lequel ils apparaissent dans le tableau; si vous souhaitez modifier la commande, vous pouvez utiliser la propriété " # weight ".
$form['html'] = array(
'#type' => 'markup',
'#markup' => '<h2>My Heading</h2>',
);
$form['html']['element'] = array(
'#type' => 'textfield',
'#title' => 'Foo',
);
Pour être un peu plus précis, les enfants des éléments de type #markup
Ne sont pas rendus. Ils sont cependant traités à des fins de formulaire.