2010-09-07 59 views
9

我有一个后端页面的自定义模块。在网格中,我将客户电子邮件显示为用户名。默认情况下,Magento为网格中的每一列添加一个过滤器。现在,当我尝试按照客户的电子邮件进行过滤时,我收到一个异常情况,说我的自定义表格没有电子邮件列。 Magento试图在我的自定义表中找到它。我该如何解决这个问题,或者如何删除该列的字段,以便管理员无法按该字段进行过滤。 谢谢。Magento禁用筛选字段到管理网格

回答

33

添加选项

'filter' => false 

添加到要从网格视图中删除过滤器的列(例如app/code/core/Mage/Admi nhtml /座/销售/订单/ Grid.php)

$this->addColumn('email', array(
     'header' => Mage::helper('module')->__('Email'), 
     'align'  =>'left', 
     'index'  => 'email', 
     'filter' => false, 
    )); 
1

我猜你的意思是“我怎样才能删除列的字段,以便管理员可以“牛逼过滤器由场”

如果是的话,我可以告诉你如何删除电子邮件字段。

打开/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. 
+0

好的,我想显示列,但删除列顶部的字段,我该怎么做? – 2010-09-07 17:22:04

+1

如果我这样做,我删除列,我不想删除列,只是在它的顶部的字段,即用于过滤 – 2010-09-07 17:36:48

0

如果您没有在您的自定义表中的电子邮件列,那么我想你被加入您的自定义表的核心创建网格包含用户电子邮件地址的表格,如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是你与加盟表。