我怎样才能得到的输出:一个控制器的动作里面我怎样才能使Magento的AJAX调用块,从控制器动作
<block type="page/template_links" name="top.links" as="topLinks"/>
?
事实上,我必须通过AJAX显示链接。
我怎样才能得到的输出:一个控制器的动作里面我怎样才能使Magento的AJAX调用块,从控制器动作
<block type="page/template_links" name="top.links" as="topLinks"/>
?
事实上,我必须通过AJAX显示链接。
$this->getLayout()->getBlock('top.links')->toHtml()
请试试这个,我已经检查过它的工作。
是的,这工作得很好,谢谢Wojtek和raf-y –
如果我理解正确的话,你可以在你的动作功能做到这一点:
$linksBlock = $this->getLayout()->createBlock('page/template_links');
echo $linksBlock->toHtml();
要获得通过Ajax调用的内容,加上这个js脚本:
new Ajax.Updater('your_container', '/your_controller/your_action');
你可以看看http://www.magentocommerce.com/magento-connect/catalog/product/view/id/18152/s/ajax-blocks-6911/ 这个模块可以加载使用AJAX块,只需通过您的布局文件
虽然所提供的upvoted答案做回答这个问题,他们都忽视了常见的情况,其中一些特定的您的块使用AJAX加载的动作将阻止Magento重定向按预期工作。
看看下面的情况:
getAddUrl($product)
助手可能产生)在这种情况下,点击'添加到购物车'后,Magento会尝试重定向用户使用CartController.php的_goBack()
方法。这会导致您先前通过AJAX加载的代码块在页面上呈现,而不是用户实际被重定向到他们所在的页面。
为了防止这种情况发生,一个额外的参数'your_param'
添加到您的装载块中的AJAX请求,并给它的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。
这个控制器是通过ajax调用请求的吗? – WojtekT