Удалить глобальные сообщения не работают
-
16-10-2019 - |
Вопрос
Мне нужно удалить глобальные сообщения. Я поместил следующее на local.xml
<remove name="global_messages" />
<remove name="messages" />
Но сообщения все еще появляются. Я также пытался прокомментировать следующие строки в page.xml
<block type="core/messages" name="global_messages" as="global_messages"/>
<block type="core/messages" name="messages" as="messages"/>
который также не сработал. Уведомление о сообщениях все еще появляются. Откуда все еще поступают, если прокомментированы в page.xml? И да, я сделал смысл Magento Cash.
Решение
Это не работает, потому что ... например, на странице просмотра продукта этот шаблон отображается: catalog/product/view.phtml
Анкет Этот шаблон содержит в верхней части этой линии:
<?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
А также $this->getMessagesBlock()
определяется в Mage_Core_Block_Abstract
И это похоже на это:
public function getMessagesBlock()
{
if (is_null($this->_messagesBlock)) {
return $this->getLayout()->getMessagesBlock();
}
return $this->_messagesBlock;
}
Это означает, что он вызывает: Mage_Core_Model_Layout::getMessagesBlock();
Этот последний метод
public function getMessagesBlock()
{
$block = $this->getBlock('messages');
if ($block) {
return $block;
}
return $this->createBlock('core/messages', 'messages');
}
Это означает, что если блок с имени «Сообщения» не найден в макете, создается и возвращается.
Я вижу 2 возможных решения здесь:
- Измените все файлы шаблонов и удалите
<?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
. Анкет Но я бы не пошел по этой дороге. Это много времени, и вы можете что -то пропустить. - Переопределить «стиль магенто» метод:
Mage_Core_Block_Messages::getGroupedHtml()
Чтобы вернуть пустую строку.
Сначала я подумал о переоценке Mage_Core_Model_Layout::getMessagesBlock()
ничего не вернуть, если блок не в макете, но вы получите ошибки при звонке ->getGroupedHtml()
на не объекте.
Но вы можете попробовать переоценить Mage_Core_Model_Layout::getMessagesBlock()
Чтобы вернуть простой core/template
Блок, который не имеет метода getGroupedHtml()
Метод и вернет нуль при вызове. (Это было бы третьим решением.)
Другие советы
Или вы можете добавить XML
неиспользованный блок, как
<block type="core/messages" name="grab_messages" />
перед старыми блоками. Потому что первым примером core/messages
Захватите все сообщения и очистите сообщения из сеанса.