Сохранение блоков cms после обновления 2.3.1 теперь отображает html на интерфейсе
После обновления 2.3.1, которое включало/включало конструктор страниц, у нас есть пользовательский раздел, который загружает содержимое блоков и отображает его, теперь избегает тегов html, поэтому выводит весь html, видимый на странице.
Это происходит только с блоками после того, как мы сохраняем их с включенным построителем страниц, просматривая таблицу базы данных cms_block
до и после сохранения. Основные отличия заключаются в том, что теперь она завернута в дополнительный div, а html экранирован, так что <div>
сохраняется как <div>
. Эти блоки имеют тип "html" в пользовательском интерфейсе нового конструктора страниц, поэтому мы ожидаем, что они будут принимать html.
Код выполняет следующие действия:
$block = $this->blockRepository->getById($blockId);
$content = $block->getContent();
, который затем выводится в шаблоне.
1 answers
Добавление конструктора страниц выполняет некоторую дополнительную обработку блоков, что происходит во время метода _toHtml()
класса Magento\Cms\Block\Block
, запускаемого поставщиком фильтров. Мое исправление состояло в том, чтобы внедрить в мой класс средство фильтрации и отфильтровать содержимое блока, чтобы конструктор страниц мог выполнять свою работу:
public function __construct(
... some stuff...
\Magento\Cms\Model\Template\FilterProvider $filterProvider
) {
... snip ...
$this->_filterProvider = $filterProvider;
}
public function myMethod($blockId)
{
$block = $this->blockRepository->getById($blockId);
$content = $this->_filterProvider->getBlockFilter()->filter($block->getContent());
return $content;
}