gpt4 book ai didi

ajax - 在自定义 Controller + Action 中使用 Magento 内置消息系统

转载 作者:行者123 更新时间:2023-12-04 20:19:30 24 4
gpt4 key购买 nike

我正在 ajaxifying 我的 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(我正在使用 Controller 中的 $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>

还有一个细节,我考虑了以下几点:

大多数操作,例如购物车的“删除”、“编辑”和产品页面的“添加到购物车”,首先重定向到不同的位置,然后发出第二个请求,显示错误。也许这些消息永远不会立即显示,而是仅在生成错误后响应请求时才显示。所以我试图通过重定向到显示这些消息的操作来遵循这个可能的约定,但这也不起作用。

如果有人能告诉我如何让这些消息出现,那我就开心了。

最佳答案

您尝试使用的消息块不适用于 AJAX 查询。正如您所指出的,它只出现在重定向之后,即:

  • 该消息通过以下方式在 session 中设置:Mage::getSingleton('adminhtml/session')->addError(Mage::helper('modulename')->__('error message'));
  • 然后是重定向:$this->_redirect('*/*/');
  • 触发一个全新的查询,加载布局。随着布局的设置,当有一条消息时,它就会显示出来。

  • 为了在 AJAX 调用中直接显示这个消息块(即,没有重定向),你必须:
  • 在 Controller 的操作中:设置消息并加载块:
    Mage::register('message', Mage::helper('yourmodule')->__('the error message');
    $layout = $this->getLayout();
    $update = $layout->getUpdate();
    $update->load('ajax_msg_handle'); //loading your custom handle, defined in your module's layout .xml file
    $layout->generateXml();
    $layout->generateBlocks();
    $output = $layout->getOutput();
    $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array('error' => $output)));
  • 在您的 .phtml echo消息:
    <ul class="messages">
    <li class="error-msg">
    <ul>
    <li><?php echo Mage::registry('message'); ?></li>
    </ul>
    </li>
    </ul>
  • 在 ajax 调用的 onComplete 部分输出 javascript 代码中的响应:
    onComplete: function(transport) {
    $$('.main-col-inner')[0].insert({before:transport.responseText.evalJSON().error});
    Element.hide('loading-mask');
    }

  • 请注意,最好创建自己的块类型,这将扩展 Mage_Core_Block_Messages 并在该块的方法中管理消息,而不是使用注册表。
    希望有帮助

    关于ajax - 在自定义 Controller + Action 中使用 Magento 内置消息系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275448/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com