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

Php Magento-使用ajax的网格过滤器重新加载整个页面,php,magento,Php,Magento,我正在使用magento admin中的网格(扩展Mage\u Adminhtml\u Block\u Widget\u grid)来显示数据库表的内容。我在其他一些模块中看到,构造函数中有一个选项可以设置为使用ajax重新加载而不是页面重新加载 这是我的构造器: public function __construct() { parent::__construct(); $this->setId('myGrid'); $this->setSaveParam

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

public function __construct() {
    parent::__construct();
    $this->setId('myGrid');
    $this->setSaveParametersInSession(true);
    $this->setVarNameFilter('my_filter');
    $this->setUseAjax(true);
}
但是,当我单击网格的过滤器并单击搜索按钮时,它会重新加载网格分区内的整个页面(包括页眉、页脚等)。

你知道为什么会这样吗?

我找到了解决办法:
首先,我必须向grid类添加以下函数

 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调用将只加载更新后的网格本身,而不包括页眉、页脚等。

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

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

块路径:
/app/code/local/{Namespace}/{Module}/Block/Adminhtml/{Module}/Grid.php

将以下代码添加到:

app/code/local/[Name\u Space]/[Module\u Name]/Block/Adminhtml/[Module\u Name]/Grid.php文件。

$this->setUseAjax(true);
public function gridAction()
     {
        $this->loadLayout();
        $this->getResponse()->setBody(
               $this->getLayout()->createBlock('[Module_Name]/adminhtml_[Module_Name]_grid')->toHtml()
        );
     }
现在在这个文件的最后添加以下函数

public function getGridUrl()
  {
      return $this->getUrl('*/*/grid', array('_current'=>true));
  }
现在在中最后添加以下功能:

app/code/local/[Name\u Space]/[Module\u Name]/controllers/Adminhtml/[Module\u Name]Controller.php文件。

$this->setUseAjax(true);
public function gridAction()
     {
        $this->loadLayout();
        $this->getResponse()->setBody(
               $this->getLayout()->createBlock('[Module_Name]/adminhtml_[Module_Name]_grid')->toHtml()
        );
     }

礼节:Nirav Kadiya

Nirav Kadiya几乎适用于我,但我在管理控制器中创建了如下gridAction功能:

public function gridAction()
     {
        $this->loadLayout();
        $this->getResponse()->setBody(
               $this->getLayout()->createBlock('[Module_Name]_Block_Adminhtml_[Model_Name]_Grid')->toHtml()
        );
     }
并将其包含在反网格文件中

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

不确定,但可能一些javascript也应用于网格。。。看看其他一些网格的.phtml文件。我有一个问题,成功转到下一页后,ajax加载窗口没有关闭。在控制器操作中,我尝试返回;返回1;返回true;回声1;等等,什么都没用。如何关闭ajax窗口?微调器没有消失也有同样的问题。我想这是因为我的
供应商\模块\块\管理员HTML \模型\网格.php
没有设置
$this->setId(“一些\ id”)内部
\u构造()
函数