Ich habe einige HTML-Inhalte, sie stammen aus einer externen Bibliothek, daher kann ich sie nicht ändern. Sie haben viele <span>
und <div>
Tags mit Attributen wie:,
<span style="color: #0000ff;">
aber wenn ich Folgendes verwende:
$render = array(
'#markup' => $myhtmlcontent,
);
In einem Render-Array entfernt Drupal die Attribute und behält sie nur <span>
ohne die Stile bei.
Wie kann ich also vermeiden, dass Drupal-Änderungen, die ich als Markup übergebe, keinen Filter benötigen, weil die Bibliothek sie sicher macht oder endlich Stile zulässt?
Antworten:
Inline-Vorlage verwenden:
In deinem Fall ohne Kontext einfach HTML aufbauen.
Sie können das Element html_tag auch für Dinge wie Skript oder Link usw. verwenden.
quelle
variable
Escape-Anweisung übersprungen, aber das `\ Drupal \ Component \ Utility \ Xss :: filterAdmin ()` filtert weiterhin Tags wie <script> und Stilattribute heraus. Die einzige Möglichkeit, die ich bisher gesehen habe, ist das Hinzufügen einer Javascript-Datei als Bibliothek und das Hinzufügen von '#attached' => 'library' => "module_name / library_key_in_yml"return
. @ See drupal.stackexchange.com/questions/211078/…Wie in der Render-API-Übersicht dokumentiert , wird in Drupal 8 die an #markup übergebene Zeichenfolge über \ Drupal \ Component \ Utility \ Xss :: filterAdmin () übergeben , wodurch bekannte XSS-Vektoren entfernt werden, während eine zulässige Liste von HTML-Tags, die nicht XSS sind, zugelassen wird Vektoren. Sie können #allowed_tags verwenden, um die Liste der zulässigen Tags festzulegen. Dies würde Drupal jedoch nicht davon abhalten, Attribute (z. B. Stil) zu entfernen.
Da Sie in Ihrem Fall komplexe HTML-Markups übergeben, sollten Sie #type verwenden (wie von Ivan Jaros vorgeschlagen) oder #theme verwenden. In diesem Fall scheint #type eine bessere Lösung zu sein.
Sie können auch einen neuen Typ mit einem Renderelement-Plugin implementieren. Wenn dies jedoch der einzige Fall ist, in dem Sie ihn benötigen, ist die Implementierung eines Renderelement-Plugins wahrscheinlich zu umfangreich.
quelle
Wenn Sie zum Rendern von Arrays einfaches Markup hinzufügen möchten, können Sie es mit \ Drupal \ Core \ Render \ Markup erstellen . Auf diese Weise können Sie Roh-HTML in etwas einfügen. So wird es beispielsweise im Berechtigungsbericht- Modul verwendet, um HTML in Tabellen einzufügen :
quelle
Führen Sie in einem Render-Array einfach Folgendes aus:
ZB wenn das
$html
mit PHPs erzeugt wurdehighlight_string()
, enthält es Stilattribute, die mit entfernt werden würden#markup
. Aber#children
bewahrt sie.quelle