我有一个带有后端页面的自定义模块。在网格中,我将客户电子邮件显示为用户名。默认情况下,Magento会为网格中的每个列添加一个过滤器。现在,当我尝试按客户的电子邮件过滤时,我得到一个例外,说我的自定义表没有电子邮件列。 Magento试图在我的自定义表中找到它。如何解决此问题,或者如何删除该列的字段,以便管理员无法按该字段进行过滤。 感谢。
答案 0 :(得分:35)
添加选项
'filter' => false
到要从网格视图中删除过滤器的列(例如app / code / core / Mage / Adminhtml / Block / Sales / Order / Grid.php)
$this->addColumn('email', array(
'header' => Mage::helper('module')->__('Email'),
'align' =>'left',
'index' => 'email',
'filter' => false,
));
答案 1 :(得分:1)
我想你的意思是“如何删除该列的字段,以便管理员可以' t 按该字段过滤”
如果是这样,我可以告诉您如何删除电子邮件字段。
打开/app/code/local/Namespace/Module/Block/Adminthml/Module/Grid.php
在受保护的函数_prepareColumns()中,您应该找到类似的内容:
$this->addColumn('email', array(
'header' => Mage::helper('module')->__('Email'),
'align' =>'left',
'index' => 'email',
));
请注意这一行。
请注意,在整个班级的最开始的__construct方法中,你没有
$this->setDefaultSort('email');
如果是,请将其更改为
$this->setDefaultSort('id'); // if you have an id field in your module.
答案 2 :(得分:0)
如果您的自定义表格中没有电子邮件列,那么我假设您通过将自定义表格加入包含用户电子邮件地址的核心表格来创建网格,例如{{ 1}}。
当您对列进行过滤时,Magento使用列索引生成where子句。在您的情况下,它会提供类似customer_entity
的内容,但它不会在您的自定义表格中找到电子邮件。
您可以通过使用WHERE email LIKE '%filter value%'
明确告诉Magento在构建where子句时使用哪个表和列来解决此问题。试试这样的事情
filter_index
其中$this->addColumn('email', array(
'header' => Mage::helper('module')->__('Email'),
'index' => 'email',
'filter_index' => 'core_table.email',
));
是您要加入的表格。