Mam pewne treści HTML, pochodzi z zewnętrznej biblioteki, więc nie można go zmienić, to ma wiele <span>
i <div>
tagi z atrybutów takich jak:
<span style="color: #0000ff;">
, ale kiedy używać:
$render = array(
'#markup' => $myhtmlcontent,
);
W tablicy renderowania Drupal usuwa atrybuty i zachowuje się <span>
bez stylów.
Jak więc uniknąć zmian Drupala, które przekazuję jako znaczniki, które nie wymagają żadnego filtru, ponieważ biblioteka zapewnia bezpieczeństwo, lub wreszcie pozwala na style?
Odpowiedzi:
Użyj szablonu wbudowanego:
W twoim przypadku bez kontekstu, po prostu prosto w górę HTML.
Możesz także użyć elementu html_tag do skryptu lub linku i tak dalej.
źródło
variable
, ale `\ Drupal \ Component \ Utility \ Xss :: filterAdmin ()` nadal odfiltruje tagi, takie jak <script> i atrybuty stylu. Jedyny sposób, jaki do tej pory widziałem, to dodanie pliku JavaScript jako biblioteki i dodanie „#attached” => „library” => „nazwa_modułu / nazwa_biblioteki w_ymlu” do powyższegoreturn
. @see drupal.stackexchange.com/questions/211078/…Jak udokumentowano w przeglądzie API renderowania , w Drupal 8 ciąg przekazywany do #markup jest przekazywany przez \ Drupal \ Component \ Utility \ Xss :: filterAdmin () , który usuwa znane wektory XSS, jednocześnie dopuszczając dopuszczalną listę znaczników HTML, które nie są XSS wektory. Możesz użyć #allowed_tags, aby ustawić listę dozwolonych tagów, ale to nie powstrzyma Drupala przed usunięciem atrybutów (np. Stylu).
Ponieważ w twoim przypadku przekazujesz złożone znaczniki HTML, powinieneś użyć #type (zgodnie z sugestią Ivana Jarosa lub #theme. W takim przypadku #type wydaje się lepszym rozwiązaniem.
Możesz także zaimplementować nowy typ z wtyczką elementu renderującego, ale jeśli jest to jedyny przypadek, w którym jest to potrzebne, wówczas implementacja wtyczki elementu renderującego jest prawdopodobnie nadmierna.
źródło
Jeśli chcesz dodać zwykły znacznik do renderowania tablic, możesz go utworzyć za pomocą \ Drupal \ Core \ Render \ Markup . To pozwoli ci włożyć w coś surowy HTML. Na przykład oto, jak jest on używany w module Raport uprawnień do umieszczania HTML w tabelach :
źródło
W tablicy renderowania po prostu zrób to:
Np. Jeśli
$html
został stworzony przy pomocy PHPhighlight_string()
, będzie zawierał atrybuty stylu, które zostaną usunięte#markup
. Ale#children
je zachowuje.źródło