Dalam Drupal 8, rendering Tabel masih banyak seperti Drupal 7. Anda membangun array multi-dimensi dari baris dan kolom dalam PHP yang Drupal mentransformasikannya menjadi a <tr>
dan <td>
s masing-masing. Masih ada Drupalisme membingungkan yang dikenal sebagai 'data'
yang memungkinkan Anda menambahkan elemen array render sebagai data sel (jangan bingung dengan atribut data).
Saya telah diberikan situs di mana pengembang memilih untuk menggunakan 'data' untuk membuat konten sel, tetapi saya tidak tahu bagaimana cara menambahkan kelas ke <td>
sekitar data.
Saya telah membaca kode sumber dan dokumentasi untuk Table.php dan saya menyadari yang baru #wrapper_attributes
tetapi saya tidak dapat memecahkan ini.
Saya sudah mencoba setidaknya empat cara untuk menambahkan kelas, dan tidak ada yang berhasil.
$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'],
],
];