Сохранение блоков cms после обновления 2.3.1 теперь отображает html на интерфейсе


После обновления 2.3.1, которое включало/включало конструктор страниц, у нас есть пользовательский раздел, который загружает содержимое блоков и отображает его, теперь избегает тегов html, поэтому выводит весь html, видимый на странице.

Это происходит только с блоками после того, как мы сохраняем их с включенным построителем страниц, просматривая таблицу базы данных cms_block до и после сохранения. Основные отличия заключаются в том, что теперь она завернута в дополнительный div, а html экранирован, так что <div> сохраняется как &lt;div&gt;. Эти блоки имеют тип "html" в пользовательском интерфейсе нового конструктора страниц, поэтому мы ожидаем, что они будут принимать html.

Код выполняет следующие действия:

$block = $this->blockRepository->getById($blockId);
$content = $block->getContent();

, который затем выводится в шаблоне.

Author: jay, 2019-06-05

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;
}
 2
Author: jay, 2019-06-05 22:55:55