J'ai du contenu html, il provient d'une bibliothèque externe donc je ne peux pas le changer, il en a beaucoup <span>
et des <div>
balises avec des attributs comme:,
<span style="color: #0000ff;">
mais quand j'utilise:
$render = array(
'#markup' => $myhtmlcontent,
);
Dans un tableau de rendu, Drupal supprime les attributs, et il reste juste <span>
sans les styles.
Alors, comment puis-je éviter que Drupal modifie ce que je passe en tant que balisage, qui n'a pas besoin de filtre parce que la bibliothèque le rend sûr, ou enfin lui permet d'autoriser les styles?
Réponses:
Utilisez un modèle en ligne:
Dans votre cas, sans contexte, montez simplement en html.
Vous pouvez également utiliser l'élément html_tag pour des choses comme le script ou le lien, etc.
la source
variable
, mais le `\ Drupal \ Component \ Utility \ Xss :: filterAdmin ()` filtrera toujours les balises comme <script> et les attributs de style. La seule façon que j'ai vue jusqu'à présent est d'ajouter un fichier Javascript en tant que bibliothèque et d'ajouter '#attached' => 'library' => "module_name / library_key_in_yml" à ce qui précèdereturn
. @see drupal.stackexchange.com/questions/211078/…Comme indiqué dans la présentation de l' API de rendu , dans Drupal 8, la chaîne transmise à #markup est transmise via \ Drupal \ Component \ Utility \ Xss :: filterAdmin () , qui supprime les vecteurs XSS connus tout en autorisant une liste permissive de balises HTML qui ne sont pas XSS vecteurs. Vous pouvez utiliser #allowed_tags pour définir la liste des balises autorisées, mais cela n'empêchera pas Drupal de supprimer les attributs (par exemple le style).
Puisque dans votre cas, vous passez un balisage HTML complexe, vous devez utiliser #type (comme suggéré par Ivan Jaros ou utiliser #theme. Dans ce cas, #type semble une meilleure solution.
Vous pouvez également implémenter un nouveau type, avec un plugin d'élément de rendu, mais si c'est le seul cas où vous en avez besoin, l'implémentation d'un plugin d'élément de rendu est probablement excessive.
la source
Si vous souhaitez ajouter un balisage brut pour rendre les tableaux, vous pouvez le créer à l'aide de \ Drupal \ Core \ Render \ Markup . Cela vous permettra de mettre du HTML brut dans quelque chose. Par exemple, voici comment il est utilisé dans le module Rapport d'autorisation pour mettre du HTML dans des tableaux :
la source
Dans un tableau de rendu, faites simplement ceci:
Par exemple, si le a
$html
été produit avec PHPhighlight_string()
, il contiendra des attributs de style qui seraient supprimés avec#markup
. Mais les#children
conserve.la source