2012-06-12 32 views

回答

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

请试试这个,我已经检查过它的工作。

+0

是的,这工作得很好,谢谢Wojtek和raf-y –

1

如果我理解正确的话,你可以在你的动作功能做到这一点:

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

要获得通过Ajax调用的内容,加上这个js脚本:

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

嗯,我得到这个错误:我做到了这一点,但它显示一个空白页面,没有出来。$ this-> getLayout() - > createBlock('page/template_links') - > toHtml(); –

+0

你有回声吗? – WojtekT

+0

你有错误还是空白页? – WojtekT

1

虽然所提供的upvoted答案做回答这个问题,他们都忽视了常见的情况,其中一些特定的您的块使用AJAX加载的动作将阻止Magento重定向按预期工作。

看看下面的情况:

  • 座通过AJAX加载
  • 块有“添加到购物车”按钮(与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。