我在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调用只会加载更新的网格本身,不会包含页眉,页脚等.
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
| 归档时间: |
|
| 查看次数: |
14133 次 |
| 最近记录: |