У меня есть некоторые HTML содержания, это происходит из внешней библиотеки , поэтому я не могу изменить его, он имеет много <span>
и <div>
тег с атрибутами , такими как:
<span style="color: #0000ff;">
, но когда я использую:
$render = array(
'#markup' => $myhtmlcontent,
);
В массиве рендеринга Drupal удаляет атрибуты и сохраняет их <span>
без стилей.
Итак, как я могу избежать изменений в Drupal, которые я передаю как разметку, которая не нуждается в каком-либо фильтре, потому что библиотека делает это безопасным или, наконец, разрешает стили?
Ответы:
Используйте встроенный шаблон:
В вашем случае без контекста, просто прямо HTML.
Вы также можете использовать элемент html_tag для таких вещей, как скрипт или ссылка и так далее.
источник
variable
, но `\ Drupal \ Component \ Utility \ Xss :: filterAdmin ()` будет по-прежнему отфильтровывать теги, такие как <script> и атрибуты стиля. Единственный способ, который я видел до сих пор, - это добавить файл Javascript в качестве библиотеки и добавить «#attached» => «library» => «module_name / library_key_in_yml» к вышеприведенномуreturn
. @see drupal.stackexchange.com/questions/211078/…Как описано в обзоре API рендеринга , в Drupal 8 строка, передаваемая в #markup, передается через \ Drupal \ Component \ Utility \ Xss :: filterAdmin () , которая удаляет известные векторы XSS, в то же время разрешая разрешительный список тегов HTML, которые не являются XSS векторы. Вы можете использовать #allowed_tags, чтобы установить список разрешенных тегов, но это не остановит Drupal от удаления атрибутов (например, стиля).
Поскольку в вашем случае вы передаете сложную HTML-разметку, вы должны использовать #type (как это было предложено от Ivan Jaros или использовать #theme. В этом случае, #type кажется лучшим решением.
Вы также можете реализовать новый тип с помощью плагина элемента рендеринга, но если это единственный случай, когда он вам нужен, то реализация плагина рендеринга элемента, вероятно, является чрезмерной.
источник
Если вы хотите добавить простую разметку для рендеринга массивов, вы можете создать ее, используя \ Drupal \ Core \ Render \ Markup . Это позволит вам вложить во что-то необработанный HTML. Например, вот как он используется в модуле « Отчет о разрешениях » для помещения HTML в таблицы :
источник
В массиве рендеринга просто сделайте это:
Например, если он
$html
был создан с помощью PHPhighlight_string()
, он будет содержать атрибуты стиля, которые будут удалены с помощью#markup
. Но#children
сохраняет их.источник