No Drupal 8, renderizar tabelas ainda é muito parecido com o Drupal 7. Você cria matrizes multidimensionais de linhas e colunas em PHP que o Drupal transforma em a <tr>
e <td>
s, respectivamente. Ainda existe esse drupalismo confuso conhecido como 'data'
que permite adicionar elementos da matriz de renderização como dados da célula (não confunda com os atributos dos dados).
Recebi um site em que o desenvolvedor optou por usar 'dados' para renderizar o conteúdo da célula, mas não consigo descobrir como adicionar uma classe ao <td>
redor dos dados.
Eu li o código fonte e a documentação do Table.php e estou ciente do novo, #wrapper_attributes
mas não consigo decifrar isso.
Eu tentei pelo menos quatro maneiras de adicionar a classe, e nenhuma funciona.
$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'],
],
];