Можно ли программно изменить html-код страницы перед ее выводом в браузер?

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Хыиуду
  • Группа: Пользователь
  • Сообщений: 56
  • Регистрация: 05.07.2012

30.07.2012 18:08

Собственно, сабж. Можно ли получить html страницы в одной строковой переменной и изменить ее.
На первый вопрос ответ точно "Да" - можно повесить обсервер на событие controller_front_send_response_before и получить код страницы как $observer->getEvent()->getFront()->getResponse(). Но метода setResponse у этого объекта нет, поэтому внесенные изменения сохранить не получится. Есть еще варианты?

#2 Юрий Ковров
  • Иконка
  • Группа: Администратор
  • Сообщений: 6
  • Регистрация: 28.07.2012

30.07.2012 18:12

Метод getResponse() возвращает объект класса Zend_Controller_Response_Http, у которого имеются методы getBody и setBody.
Метод getBody возвращает тело ответа HTTP, а метод setBody позволяет изменить тело ответа HTTP.

#3 Хыиуду
  • Группа: Пользователь
  • Сообщений: 56
  • Регистрация: 05.07.2012

30.07.2012 18:41

Спасибо большое, коротко и по делу!
Кстати, еще с той же целью можно повесить обсервер на событие http_response_send_before, оно даже и правильней.
Попутно нашелся еще один способ: можно унаследовать класс Mage_Page_Block_Html и переопределить в нем
protected function _toHtml()
{
    $html = parent::_toHtml();
    // тут внести свои изменения
    return $html;
}


Поделиться темой: