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

cle*_*lem 15 php magento

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

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

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

cle*_*lem 19

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

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

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

<module_controller_grid>
  <reference name="root">
    <block type="package/gridblockname" name="root" output="toHtml" />
  </reference>
</module_controller_grid>
Run Code Online (Sandbox Code Playgroud)

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

  • 我有一个问题,即成功转到下一页后ajax加载窗口没有关闭.在我的控制器动作中,我试着返回; 返回1; 返回true; 回声1; 没什么用的.如何关闭ajax窗口? (4认同)

Ren*_*art 13

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

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

假设:

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


Nik*_*K_R 13

将以下代码添加到__construct()函数中:

app/code/local/[Name_Space]/[Module_Name]/Block/Adminhtml/[Module_Name]/Grid.php file.

$this->setUseAjax(true);
Run Code Online (Sandbox Code Playgroud)

现在在此文件的最后添加以下功能.

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

现在添加以下功能:

app/code/local/[Name_Space]/[Module_Name]/controllers/Adminhtml/[Module_Name]Controller.php file.

public function gridAction()
     {
        $this->loadLayout();
        $this->getResponse()->setBody(
               $this->getLayout()->createBlock('[Module_Name]/adminhtml_[Module_Name]_grid')->toHtml()
        );
     }
Run Code Online (Sandbox Code Playgroud)

礼貌:Nirav Kadiya