【发布时间】:2016-11-06 03:08:08
【问题描述】:
我有一个带有后端页面的自定义模块。在网格中,我将客户电子邮件显示为用户名。默认情况下,Magento 会为网格中的每一列添加一个过滤器。现在,当我尝试按客户的电子邮件进行过滤时,我收到一个异常,说我的自定义表没有电子邮件列。 Magento 正试图在我的自定义表中找到它。如何解决此问题,或者如何删除该列的字段,以便管理员无法按该字段进行过滤。 谢谢。
【问题讨论】:
标签: magento
我有一个带有后端页面的自定义模块。在网格中,我将客户电子邮件显示为用户名。默认情况下,Magento 会为网格中的每一列添加一个过滤器。现在,当我尝试按客户的电子邮件进行过滤时,我收到一个异常,说我的自定义表没有电子邮件列。 Magento 正试图在我的自定义表中找到它。如何解决此问题,或者如何删除该列的字段,以便管理员无法按该字段进行过滤。 谢谢。
【问题讨论】:
标签: magento
添加选项
'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,
));
【讨论】:
我猜你的意思是“我怎样才能删除该列的字段,以便管理员可以 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.
【讨论】:
如果您的自定义表格中没有电子邮件列,那么我假设您通过将自定义表格连接到包含用户电子邮件地址的核心表格(例如 customer_entity)来创建网格。
当您过滤列时,Magento 使用列索引来生成 where 子句。在您的情况下,它会给出类似WHERE email LIKE '%filter value%' 的信息,但它不会在您的自定义表格中找到电子邮件。
您可以通过使用filter_index 来明确地告诉 Magento 在构建 where 子句时使用哪个表和列来解决这个问题。试试这样的
$this->addColumn('email', array(
'header' => Mage::helper('module')->__('Email'),
'index' => 'email',
'filter_index' => 'core_table.email',
));
core_table 是您要加入的表。
【讨论】: