Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从控制器操作中调用magentoajax块_Php_Ajax_Magento - Fatal编程技术网

Php 如何从控制器操作中调用magentoajax块

Php 如何从控制器操作中调用magentoajax块,php,ajax,magento,Php,Ajax,Magento,如何获得以下各项的输出: <block type="page/template_links" name="top.links" as="topLinks"/> 控制器动作内部 事实上,我必须通过AJAX显示链接 如果我理解正确,您可以在操作功能中执行此操作: $linksBlock = $this->getLayout()->createBlock('page/template_links'); echo $linksBlock->toHtml(); 要通过

如何获得以下各项的输出:

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

控制器动作内部


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

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

$linksBlock = $this->getLayout()->createBlock('page/template_links');
echo $linksBlock->toHtml();
要通过ajax调用获取内容,请添加以下js脚本:

new Ajax.Updater('your_container', '/your_controller/your_action');
请试试这一个,我已经检查过了,它还在工作。

你可以看看
此模块允许您使用ajax加载块,只需通过布局文件即可

虽然提供的投票结果确实回答了问题,但它们都忽略了一种常见情况,即使用ajax加载的块所采取的某些特定操作将阻止Magento重定向按预期工作

以以下情况为例:

  • 通过AJAX加载的块
  • 块具有“添加到购物车”按钮(可能是由
    getAddUrl($product)
    helper生成的)
  • 系统配置>>结帐>>购物车>>“添加产品后重定向到购物车”==否
在这种情况下,单击“添加到购物车”后,Magento将尝试使用CartController.php的
\u goBack()
方法重定向用户。这会导致先前通过AJAX加载的块在页面上呈现,而不是将用户重定向到他们所在的页面


为了防止这种情况发生,请在加载块的AJAX请求中添加一个额外的参数
'your_param'
,并为其指定一个值
Mage::helper('core/url')->getCurrentUrl()
(或任何您可能需要的值)。例如:

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

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

这个控制器是由ajax调用请求的?我得到了一个错误:我用它做了,但是它显示了一个空白页面,没有输出。$This->getLayout()->createBlock('page/template_links')->toHtml();是的,我确实回显了,但发现了一个空白页面:回显$linksBlock=$this->getLayout()->createBlock('page/template_links')->toHtml();当我调用header:echo$linksBlock=$this->getLayout()->createBlock('page/html_header')->toHtml();结果很好。createBlock()为我返回null。我想知道你试图创建的块是否必须在加载的布局中或其他地方?我不知道该怎么做。
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() ...