In Drupal 8 ähnelt das Rendern von Tabellen immer noch Drupal 7. Sie erstellen in PHP mehrdimensionale Arrays von Zeilen und Spalten, die Drupal in a <tr>
bzw. <td>
s umwandelt . Es gibt immer noch diesen verwirrenden Drupalismus 'data'
, mit dem Sie Render-Array-Elemente als Zellendaten hinzufügen können (nicht zu verwechseln mit Datenattributen ).
Ich habe eine Site erhalten, auf der der Entwickler "Daten" zum Rendern des Inhalts der Zelle verwendet hat, aber ich kann nicht herausfinden, wie eine Klasse zu <td>
den Daten hinzugefügt werden kann.
Ich habe den Quellcode und die Dokumentation für Table.php gelesen und bin mir des neuen bewusst #wrapper_attributes
, kann dies aber nicht knacken.
Ich habe mindestens vier Möglichkeiten ausprobiert, um die Klasse hinzuzufügen, und keine funktioniert.
$table['row-' . $row_id] = [
// Option 1: Class appears on <tr> tag
'#attributes' => [
'class' => ['option-1-row-attributes'],
'id' => 'row-' . $row_id,
'no_striping' => TRUE,
],
// Option 2: Class appears on <td> tag of first column.
'item' => [
'#markup' => $row['my_item']->label(),
'#wrapper_attributes' => [
'class' => ['option-2-markup-wrapper-attributes'],
],
],
// In the following section, the only item that works is
// the class on the <a> tag.
'edit_operation' => [
'data' => [
'#type' => 'link',
'#url' => Url::fromRoute('my_module.my_route', ['item' => $row_id]),
'#title' => $this->t('Edit'),
'#attributes' => [
// Option 3: Class appears on the anchor tag
'class' => ['use-ajax', 'option-3-link-attributes'],
'data-dialog-type' => 'modal',
'data-dialog-options' => Json::encode([
'width' => 700,
]),
],
// Option 4: Has no effect.
'#wrapper_attributes' => [
'class' => ['option-4-data-wrapper-attributes'],
],
],
// Option 5: Update: This appears to be the correct solution!
// Class appears on the <td>.
'#wrapper_attributes' => [
'class' => ['option-5-wrapper-attributes'],
],
// Option 6: Has no effect.
'#attributes' => [
'class' => ['option-6-attributes'],
],
// Option 7: Has no effect.
'class' => ['option-7-attributes'],
],
];