Das Formularelement "#markup" kann keine untergeordneten Elemente haben

7

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?

user1589
quelle
Es ist kein Fehler, es ist ein Missverständnis. Andere Elemente können nicht in einen Markup-Text eingefügt werden. Erstellen Sie stattdessen einen Container und fügen Sie dort das Markup und das Textfeld hinzu.
Neograph734

Antworten:

8

Die Nichtverwendung von "#tree" mit einem "#markup" -Element scheint ein Fehler von Drupal zu sein, da auf der Referenzseite der Formular-API angegeben wird, dass "#tree" vom "#markup" -Element unterstützt wird .

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 das <h2>My Heading</h2>Tag nur vor den Formularfeldern rendern möchten . 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',
);
kiamlaluno
quelle
Danke, aber ich brauche das Baumelement, da meine eigentliche Form etwas ausgefeilter ist als das obige Beispiel. Ich versuche auch zu vermeiden, Präfix- / Suffix-Markup-Werte zu verwenden, um den Code sauberer und so weiter zu halten. Mein Formular besteht aus einigen Schleifen, die eine Baumstruktur von Elementen mit einer Tiefe von ca. 4 erzeugen. Wenn der Elementtyp 'Markup' keine untergeordneten Elemente haben kann, muss ich einen Teil meines Formulars neu strukturieren.
user1589
Es scheint ein Fehler von Drupal zu sein, da das "Markup" -Element "#tree" verwenden soll; Was ich gemeldet habe, sind die einzigen Problemumgehungen / Alternativen, die mir bekannt sind.
Kiamlaluno
1
Ich habe einen Problembericht geöffnet: drupal.org/node/1261040 . Die verweisende Version ist 8.x, da die Fehler zuerst in Drupal 8 behoben und dann wieder auf die vorherigen Versionen portiert wurden.
Kiamlaluno
1

Genauer gesagt werden die #markupuntergeordneten Elemente von Typelementen nicht gerendert. Sie werden jedoch zu Formularzwecken verarbeitet.


quelle