Ich verwende das Element Drupal 8 #table, um eine Tabelle in meinem Formular zu füllen, und es eignet sich hervorragend zum Anzeigen statischer Daten.
foreach ($entries = getData() as $entry) {
$row = array_map('Drupal\Component\Utility\SafeMarkup::checkPlain', $entry);
$rows[] = $row;
}
$form['table'] = array(
'#type' => 'table',
'#header' => $headers,
'#rows' => $rows,
'#attributes' => array('id' => 'my-module-list'),
'#empty' => t('No entries available.'),
);
Ich möchte jedoch ein Steuerelement in jede Zeile der Tabelle einbetten, zum Beispiel:
foreach ($entries = getData() as $entry) {
$row = array_map('Drupal\Component\Utility\SafeMarkup::checkPlain', $entry);
$row["field_name"] = array(
'#type' => 'textbox',
);
$rows[] = $row;
}
//dpm($rows);
$form['table'] = array(
'#type' => 'table',
'#header' => $headers,
'#rows' => $rows,
'#attributes' => array('id' => 'my-module-list'),
'#empty' => t('No entries available.'),
);
Das Feld #textbox wird derzeit jedoch ignoriert, und an seiner Stelle wird eine leere Zelle angezeigt.
Gibt es eine Möglichkeit, Felder in eine von Drupal generierte Tabelle einzubetten, oder muss ich meine eigene Tabelle von Grund auf neu erstellen?
#rows
Element wird beim Rendern der Tabelle in eine Tabelle mit einfachen Textzellen konvertiert. Um Steuerelemente in die Tabelle einzufügen, fügen Sie die Zeilen als direkte Elemente des#table
Arrays ein. Alles in der Tabelle wird dann als Steuerelement behandelt, sodass Klartextzellen einen#markup
Eintrag haben müssen .Antworten:
Es ist kein Problem, Formularelemente in eine Tabelle einzufügen. Siehe das Beispiel in core / lib / Drupal / Core / Render / Element / Table.php:
Vielleicht sollten Sie von hier aus beginnen und dann Schritt für Schritt Ihren Code in dieses Beispiel einfügen und sehen, wann er kaputt geht.
quelle