it-swarm.com.de

HTML in der Tabellenzelle wird maskiert

Ich erstelle programmgesteuert eine Tabelle in Drupal 8, mit #type => 'table'. Ich füge einer Tabellenzelle etwas HTML hinzu, die Ausgabe wird jedoch maskiert, sodass der HTML-Code wird als einfacher Text und nicht als HTML gerendert.

Nach allem, was ich lese, klingt es so, als ob alle Ausgaben in twig Vorlagen standardmäßig maskiert sind.

Ich schätze, ich kann table.html.twig überschreiben, aber ich vermute (hoffe), dass es eine Möglichkeit gibt, dies beim Definieren der Tabelle zu tun, anstatt die Vorlage jedes Mal zu überschreiben, wenn ich eine neue Tabelle mit HTML erstellen möchte .

Weiß jemand, wie man HTML in einer Tabellenzelle in D8 verwendet?

6
Jaypan

Die Antwort (die bei mir funktioniert hat) ist die Verwendung von FormattableMarkup:

verwenden Sie Drupal\Component\Render\FormattableMarkup.

$row[] = new FormattableMarkup('<span>@somevalue</span>', ['@somevalue' => 'some value']);
5
Jaypan

Funktioniert bei mir mit '#markup'.

$html= ['#markup' => '<div class="any_class">HTML</div>'];

$results = [
  '#type' => 'table',
  '#header' => [t('Column 1')],
  '#rows' => [
    [render($html)]
  ]
];

verwenden Sie Drupal\Component\Render\FormattableMarkup. ist eine großartige Antwort, aber Sie können auch tun:

$row['myrow']['data'] = [
  '#markup' => '<h2>HELLO</h2>',
];

oder für links kannst du einfach

 $row['myrow']['data']['#links'] = [
   $operations['edit'] = [
      'weight' => -5,
      'title' => $this->t('Edit Me'),
      'url' => Url::fromRoute('entity.someroute.edit', $route_parameters),
    ];
 ];

Führen Sie auf Ihrer Website eine Suche nach allen Verwendungszwecken von "['data'] [" durch.

sie können auch einige Klassen wie einstellen

 $row['myrow']['data']['#attributes']['class'] = ['button', 'button-action', 'button--primary', 'button--small'];
2
Taggart Jensen

Sie können inline_template verwenden, während Sie eine Tabelle erstellen. inline_template Beschreibung gemäß Dokumentationsseite:

Stellt ein Renderelement bereit, in dem der Benutzer eine Inline-Vorlage Twig Vorlage) bereitstellt.

Hier ist ein Beispiel von Drupal 8 Benutzerberechtigungsseite. Die Zeilenzelle type ist definiert als inline_template und HTML Markup und dynamische Variablen werden an sie übergeben:

  $form['permissions'][$perm]['description'] = array(
    '#type' => 'inline_template',
    '#template' => '<div class="permission"><span class="title">{{ title }}</span>{% if description or warning %}<div class="description">{% if warning %}<em class="permission-warning">{{ warning }}</em> {% endif %}{{ description }}</div>{% endif %}</div>',
    '#context' => array(
      'title' => $perm_item['title'],
    ),
  );
2
Yogesh

Das hat bei mir funktioniert:

  // Build row
  $rows[ $one_nid ] = array(
    'title' => array(
      'data' => $one_node->getTitle(),
      'class' => 'donkey',
    ),
    'price_change_today' => array(
      'data' => array(
        '#markup' => $price_change.'<span class="price-change-icon"></span>'.$price_percent_change,
      ),
      'class' => 'burro',
    ),
  );

// Return render array for table
return array(
  '#theme' => 'table',
  '#header' => $headers,
  '#rows' => $rows,
);

Vielen Dank an alle für die Codebeispiele, die mir dabei geholfen haben, dies herauszufinden!

1
Jason Safro