it-swarm.com.de

Theming einer Tabelle '#type' vs '#theme'

Ich rendere dynamisch eine Tabelle in einem Drupal 8-Modul. Beim Erstellen meines renderbaren Arrays habe ich festgestellt, dass ich meine Tabelle als '#theme' => 'table' Oder als '#type' => 'table' Definieren kann. .

$variables['test_table'] = [
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#attributes' => array('class'=>array('my-table')),
    '#header_columns' => 4,
];

vs:

$variables['test_table'] = [
    '#type' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#attributes' => array('class'=>array('my-table')),
    '#header_columns' => 4,
];

Beide Optionen scheinen dasselbe auszugeben.

Meine Frage lautet: Warum kann ich beim Definieren eines tabellierbaren Tabellenarrays entweder '#theme' => 'table' Oder '#type' => 'table' Verwenden und gibt es einen Unterschied, wie Drupal wird diese unterschiedlich rendern? .

4
Rubix05

Ich glaube, dass letztendlich beide dasselbe tun werden. Wenn Sie jedoch 'type' verwenden, beziehen Sie sich auf das zu verwendende Element drupal) (siehe https://api.drupal.org/api/drupal/elements ) und wenn Sie '#theme' verwenden, sagen Sie direkt, welche twig - Vorlage verwendet werden soll.

3
Matt

Wie Matt bereits sagte, ist der Vorteil der Verwendung von #type ist, dass Sie Standard-Render-Array-Kinder haben können, anstatt #rows zu verwenden, was Sie nicht mit #type verwenden sollten, aber es funktioniert, weil es im Grunde nur ein Wrapper ist, der schließlich intern '' #theme '=>' table 'verwendet.

Dadurch können Formularelemente in eine Tabelle eingefügt werden. In 7.x war dies immer ein Problem, das benutzerdefinierte Designfunktionen erforderte, um eine Formularstruktur wieder in etwas umzuwandeln, das die Tabellenvorlage versteht.

2
Berdir