it-swarm.com.de

Das Formularelement "#markup" kann keine untergeordneten Elemente haben

Ich habe mein Formular, aber jedes untergeordnete Element des Elements "#markup" wird beim Rendern des Formulars nicht angezeigt.

$form['html'] = array(
  '#type' => 'markup',
  '#markup' => '<h2>My Heading</h2>',
  '#tree' => true,
);

$form['html']['element'] = array(
  '#type' => 'textfield',
  '#title' => 'Foo',
);

In diesem Beispiel wird das Formularfeld "Element" nicht gerendert.

Ist das ein Drupal Fehler) oder muss ich etwas Bestimmtes tun?

7
user1589

Die Nichtverwendung von "#tree" mit einem "#markup" -Element scheint ein Fehler von Drupal zu sein, da die Referenzseite für die Formular-API meldet, dass "#tree" von "unterstützt wird. Element #markup " .

Um dieses Problem zu umgehen, können Sie auch die Eigenschaft "#prefix" wie im folgenden Code verwenden:

$form['html']['element'] = array(
  '#type' => 'textfield',
  '#title' => 'Foo',
  '#prefix' => '<h2>My Heading</h2>',
);

Wenn es nicht wie erwartet gerendert wird, können Sie einfach "#tree" aus Ihrem Code entfernen, was nicht erforderlich zu sein scheint, wenn Sie nur das <h2>My Heading</h2> Tag vor den Formularfeldern. Die Formular-API rendert die Elemente in der Reihenfolge, in der sie im Array angezeigt werden. Wenn Sie die Reihenfolge ändern möchten, können Sie die Eigenschaft " # weight " verwenden.

$form['html'] = array(
 '#type' => 'markup',
 '#markup' => '<h2>My Heading</h2>',
);

$form['html']['element'] = array(
  '#type' => 'textfield',
  '#title' => 'Foo',
);
8
kiamlaluno

Genauer gesagt, die Kinder von #markup Elemente werden nicht gerendert. Sie werden jedoch zu Formularzwecken verarbeitet.

1
user49