Eu tenho algum conteúdo html, ele vem de uma biblioteca externa, então eu não posso alterá-lo, ele tem muitos <span>
e <div>
tags com atributos como:,
<span style="color: #0000ff;">
mas quando eu uso:
$render = array(
'#markup' => $myhtmlcontent,
);
Em uma matriz de renderização, o Drupal retira os atributos e permanece apenas <span>
sem os estilos.
Então, como posso evitar que o Drupal altere o que passo como marcação, que não precisa de filtro porque a biblioteca a torna segura ou, finalmente, permite estilos?
Respostas:
Use o modelo embutido:
No seu caso, sem contexto, basta clicar em html.
Você também pode usar o elemento html_tag para coisas como script ou link e assim por diante.
fonte
variable
, mas o `\ Drupal \ Component \ Utility \ Xss :: filterAdmin ()` ainda filtrará tags como <script> e atributos de estilo. A única maneira que vi até agora é adicionar um arquivo Javascript como biblioteca e adicionar '#attached' => 'library' => "module_name / library_key_in_yml" ao acimareturn
. @see drupal.stackexchange.com/questions/211078/…Conforme documentado na visão geral da Render API , no Drupal 8, a sequência passada para #markup é passada por \ Drupal \ Component \ Utility \ Xss :: filterAdmin () , que remove os vetores XSS conhecidos, permitindo uma lista permissiva de tags HTML que não são XSS vetores. Você pode usar #allowed_tags para definir a lista de tags permitidas, mas isso não impediria o Drupal de remover atributos (por exemplo, estilo).
Como você está passando uma marcação HTML complexa, use #type (como sugerido por Ivan Jaros ou #theme. Nesse caso, #type parece uma solução melhor.
Você também pode implementar um novo tipo, com um plug-in de elemento de renderização, mas se esse for o único caso em que você precisar, a implementação de um plug-in de elemento de renderização provavelmente será excessiva.
fonte
Se você deseja adicionar uma marcação simples para renderizar matrizes, é possível criá-la usando \ Drupal \ Core \ Render \ Markup . Isso permitirá que você coloque HTML bruto em algo. Por exemplo, veja como é usado no módulo Relatório de permissão para colocar HTML em tabelas :
fonte
Em uma matriz de renderização, basta fazer o seguinte:
Por exemplo, se o
$html
foi produzido com PHPhighlight_string()
, ele conterá atributos de estilo que seriam removidos#markup
. Mas os#children
preserva.fonte