Tengo algo de contenido html, proviene de una biblioteca externa, por lo que no puedo cambiarlo, tiene muchos <span>
y <div>
etiquetas con atributos como:,
<span style="color: #0000ff;">
pero cuando uso:
$render = array(
'#markup' => $myhtmlcontent,
);
En una matriz de renderizado, Drupal elimina los atributos y se mantiene <span>
sin los estilos.
Entonces, ¿cómo puedo evitar que Drupal cambie lo que paso como marcado, que no necesita ningún filtro porque la biblioteca lo hace seguro, o al fin hace que permita estilos?
Respuestas:
Usar plantilla en línea:
En su caso sin contexto, solo html directo.
También puede usar el elemento html_tag para cosas como script o enlace, etc.
fuente
variable
, pero `\ Drupal \ Component \ Utility \ Xss :: filterAdmin ()` aún filtrará etiquetas como <script> y atributos de estilo. La única forma que he visto hasta ahora es agregar un archivo Javascript como biblioteca y agregar '#attached' => 'library' => "module_name / library_key_in_yml" a lo anteriorreturn
. @see drupal.stackexchange.com/questions/211078/…Como se documenta en la descripción general de Render API , en Drupal 8 la cadena pasada a #markup se pasa a través de \ Drupal \ Component \ Utility \ Xss :: filterAdmin () , que elimina los vectores XSS conocidos mientras permite una lista permisiva de etiquetas HTML que no son XSS vectores Puede usar #allowed_tags para establecer la lista de etiquetas permitidas, pero eso no evitaría que Drupal elimine los atributos (por ejemplo, estilo).
Como en su caso está pasando un marcado HTML complejo, debe usar #type (como lo sugiere Ivan Jaros o usar #theme. En este caso, #type parece una mejor solución.
También podría implementar un nuevo tipo, con un complemento de elemento de representación, pero si ese es el único caso donde lo necesita, la implementación de un complemento de elemento de representación es probablemente excesiva.
fuente
Si desea agregar marcado simple para representar matrices, puede crearlo usando \ Drupal \ Core \ Render \ Markup . Esto le permitirá poner HTML sin formato en algo. Por ejemplo, así es como se usa en el módulo Informe de permisos para poner HTML en tablas :
fuente
En una matriz de renderizado, simplemente haga esto:
Por ejemplo, si
$html
se produjo con PHPhighlight_string()
, contendrá atributos de estilo que se eliminarían con#markup
. Pero los#children
conserva.fuente