如何从控制器操作中对Magento ajax调用块

时间:2012-06-12 10:07:33

标签: php ajax magento

如何获得输出:

<block type="page/template_links" name="top.links" as="topLinks"/>

在控制器动作中?

事实上,我必须通过AJAX显示链接。

4 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以在动作功能中执行此操作:

$linksBlock = $this->getLayout()->createBlock('page/template_links');
echo $linksBlock->toHtml();

要通过ajax调用获取内容,请添加此js脚本:

new Ajax.Updater('your_container', '/your_controller/your_action');

答案 1 :(得分:1)

$this->getLayout()->getBlock('top.links')->toHtml()

请尝试这个,我检查了它的工作。

答案 2 :(得分:1)

虽然所提供的上述答案确实回答了问题,但他们都忽略了这样的常见情况:使用AJAX加载的块所采取的某些特定操作将阻止Magento重定向按预期工作。

采取以下情况:

  • 通过AJAX加载阻止
  • 阻止了“添加到购物车”按钮(可能是使用getAddUrl($product)帮助程序生成的)
  • 系统配置&gt;&gt;结帐&gt;&gt;购物车&gt;&gt; '将产品重定向添加到购物车后'==否

在这种情况下,点击“添加到购物车”后,Magento将尝试使用CartController.php的_goBack()方法重定向用户。这会导致您之前通过AJAX加载的块在页面上呈现,而不是实际被重定向到他们所在页面的用户。


要防止出现这种情况,请在加载块的AJAX请求中添加一个附加参数'your_param',并为其赋值Mage::helper('core/url')->getCurrentUrl()(或其他任何您想要的值)。如:

jQuery.ajax({
    url: '<?php echo $yourUrl ?>',
    page: '<?php echo Mage::helper("core/url")->getCurrentUrl()?>'
})

然后,在控制器的相关操作方法中,将快速条件添加到方法的开头,例如:

if (!this->getRequest()->isXmlHttpRequest()) {
    $this->getResponse()->setRedirect($this->getRequest()->getParam('your_param'));
}
// ... existing controller code ...
// ... ie: $block->toHtml() ...

这将允许用户在添加到购物车后返回其上一页。这也将为用户提供一种方式,如果他们碰巧最终到达您的控制器的URL,则返回该站点。

答案 3 :(得分:-1)

您可以查看http://www.magentocommerce.com/magento-connect/catalog/product/view/id/18152/s/ajax-blocks-6911/ 该模块允许您使用ajax加载块,只需通过布局文件

即可