Я ajaxification моего магазина magento, и почти все идет гладко, за исключением одного:
Проблема:
Кажется, я не могу получить и отобразить блок сообщений в ответах на запросы AJAX.
Пояснение:
Я имею в виду красную (или зеленую, когда это сообщение об успехе) панель, которая появляется для пользователя после попытки чего-то, что не работает (например, добавление в корзину большего количества товаров, чем позволяет товар). Отвечая на определенные запросы Ajax, которые вызывают ошибки, я хочу отобразить разметку сообщений через довольно пустой шаблон, который используется для визуализации ответа на этот запрос AJAX. Если ошибки не возникает, выдается другой соответствующий ответ.
То, что я пробовал:
Вот несколько строк кода PHP, которые я пытался использовать:
$_messages = Mage::getSingleton("core/session")->getMessages();
echo $this->getLayout()->createBlock("core/messages")->setMessages($_messages)->getGroupedHtml();
echo $this->getMessagesBlock()->getGroupedHtml();
echo Mage::app()->getLayout()->getMessagesBlock()->
setMessages(Mage::getSingleton('customer/session')->getMessages(true))->getGroupedHtml();
Mage::log
данные показывают пустые коллекции сообщений.
Вот XML-макет (я использую $this->loadLayout('ajax_msg_handle');
из контроллера):.
<ajax_msg_handle>
<block type="core/template" name="error.root" output="toHtml" template="page/html/ajax-messages.phtml">
<block type="core/messages" name="global_messages" as="global_messages"/>
<block type="core/messages" name="messages" as="messages"/>
</block>
</ajax_msg_handle>
Также подробно, я рассмотрел следующее:
Большинство действий, таких как «удалить», «изменить» корзины и «добавить в корзину» страницы продукта, сначала перенаправляют в другое место, поэтому выполняется второй запрос, который показывает ошибку. Возможно, эти сообщения никогда не отображаются сразу, а только при ответе на запрос после того, который генерирует ошибку. Поэтому я попытался следовать этому возможному соглашению, перенаправив на действие, которое отображает эти сообщения, но это тоже не сработало.
Если кто-нибудь скажет мне, как заставить эти сообщения появляться, это сделает мой день.