Magento - 使用ajax的网格过滤器重新加载整个页面

2022-08-31 00:09:24

我正在使用magento admin(扩展)中的网格来显示数据库表的内容。我在其他一些模块中看到,在构造函数中设置了一个选项,以使用ajax重新加载而不是页面重新加载
,这是我的构造函数:Mage_Adminhtml_Block_Widget_Grid

public function __construct() {
    parent::__construct();
    $this->setId('myGrid');
    $this->setSaveParametersInSession(true);
    $this->setVarNameFilter('my_filter');
    $this->setUseAjax(true);
}

但是当我单击网格的过滤器并单击搜索按钮时,它会重新加载整个页面(包括页眉,页脚,...)在网格 div 里面 有什么
想法为什么会这样吗?


答案 1

我找到了解决方案:
首先,我必须将以下函数添加到网格类中

 public function getGridUrl()
 {
   return $this->getUrl('*/*/grid', array('_current'=>true));
 }

然后,每个ajax调用将被发送到此URL(以及相应的控制器操作),而不是页面URL。
然后我将以下位添加到布局XML文件中:

<module_controller_grid>
  <reference name="root">
    <block type="package/gridblockname" name="root" output="toHtml" />
  </reference>
</module_controller_grid>

这将覆盖根元素并仅显示网格块。因此,我的ajax调用将仅加载更新的网格本身,并且不会包含页眉,页脚等。


答案 2

您还可以将“gridAction”方法添加到管理控制器,而不是创建布局 xml

public function gridAction()
{
    $this->loadLayout();
    $this->getResponse()->setBody(
           $this->getLayout()->createBlock('{Namespace}/adminhtml_{Module}/grid')->toHtml()
    ); 
}

若:

Block Path : /app/code/local/{Namespace}/{Module}/Block/Adminhtml/{Module}/Grid.php


推荐