2011-05-18 48 views
1

如何将自定义列添加到magento客户网格?Magento - 向客户网格添加列

非常感谢。

+0

可能的重复[添加栏到Magento管理员目录>管理产品](http://stackoverflow.com/questions/5990910/add-column-to-magento-admin-catolog-manage - 产品)(不同的网格,但方法相同)。 – clockworkgeek 2011-05-18 15:38:37

+0

谢谢,如果我想在新模块中复制客户网格。 – Bizboss 2011-05-19 08:06:07

+0

只需像其他任何PHP类一样扩展即可。 – clockworkgeek 2011-05-19 10:41:54

回答

7

你应该覆盖类Mage_Adminhtml_Block_Customer_Grid(应用程序/代码/核心/法师/ Adminhtml /座/客户/ Grid.php),并应用以下更改:

1 - 添加新的属性在_prepareCollection显示()函数

2 - 添加新列在_prepareColumns显示()函数

2

信用:http://www.leonhostetler.com/blog/magento-add-attribute-columns-in-manage-products-grid-201205/

的Magento不为我们提供了选择哪个属性的能力作为管理产品网格中的列包含在内,但对代码进行必要的更改非常简单。

生成管理产品网格的代码位于/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php。你需要做的第一件事是将Grid.php复制到本地目录结构中。换句话说,您将Grid.php复制到以下位置; /应用程序/代码/本地/法师/ Adminhtml /座/目录/产品/。如果没有这样的位置,那么你必须创建必要的目录。文件的最终位置必须是; /app/code/local/Mage/Adminhtml/Block/Catalog/Product/Grid.php

现在,打开Grid.php(本地目录结构中的一个)并开始编辑。找到下面的代码;

$这 - > addColumn( 'SKU', 阵列( '标题'=>法师::助手( '目录') - > __( 'SKU'), '宽度'=>' 80px', 'index'=>'sku', ));

这是将SKU列添加到产品网格中的代码。现在,假设您有一个名为供应商ID(supplier_ID)的自定义属性,并且您希望这些属性也出现在管理产品网格中。将以下代码放置在上述代码块之前或之后,只要它位于_prepareColumns()内部即可。

$this->addColumn('supplier_id', 
    array(
     'header'=> Mage::helper('catalog')->__('Supplier ID'), 
     'width' => '150px', 
     'index' => 'supplier_id', 
    )); 

然后添加以下行到其他属性中列出这样_prepareCollection();

- > addAttributeToSelect( 'supplier_id')

这应该是所有你需要做的。您可能需要重新编译,刷新缓存,注销并重新登录才能查看产品网格中的更改。

以上示例用于为文本字段的存储所有者添加具有目录输入类型的属性。如果你的属性使用下拉列表呢?上面的代码将不得不被修改。

比方说,您有一个属性称为供应商(供应商),它在产品编辑器中提供可供选择的供应商下拉列表。要做到这一点,我们可以将下面的代码添加到_prepareColumns():

$ supplier_items = 法师:: getModel( 'EAV/entity_attribute_option') - > getCollection() - > setStoreFilter() - >连接( 'attribute','attribute.attribute_id = main_table.attribute_id', 'attribute_code'); foreach($ supplier_items as $ supplier_item): if($ supplier_item-> getAttributeCode()=='supplier') $ supplier_options [$ supplier_item-> getOptionId()] = $ supplier_item-> getValue(); endforeach; $ this-> addColumn('supplier', array( 'header'=> Mage :: helper('catalog') - > __('supplier'), 'width'=>'150px', 'type '=>'options', 'index'=>'supplier', 'options'=> $ supplier_options,));

并且我们不要忘记将以下行添加到_prepareCollection()其中列出其他属性,

- > addAttributeToSelect( '供应商')

这应该为你做它。重新编译,刷新缓存,然后注销,如果需要的话重新登录。

+1

这是一个很好的答案,但是我给它一个反对票,因为它完全没有意识到所问的问题是关于向客户网格添加一列,而不是产品网格。当然,这个过程几乎是一样的,这个答案甚至没有试图至少提到客户网格是在app/code/core/Mage/Adminhtml/Block/Customer/Grid.php下找到的。 唉,我现在没有声望投票。所以我建议至少修改答案。 – Meogi 2013-11-20 19:48:47

1

我已经发布here真实的例子。

如果您需要添加custome属性,您可能需要谨慎处理join语句。

->joinAttribute('billing_postcode', 'customer_address/postcode', 'default_billing', null, 'left') 
1

用您的自定义模块重写客户网格块。

应用程序/代码/ [地方或社区] /YourCompany/YourModule/etc/config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <yourcompany_yourmodule> 
      <version>0.1.0</version> 
     </yourcompany_yourmodule> 
    </modules> 
    <global> 
     <blocks> 
      <adminhtml> 
       <rewrite> 
        <customer_grid>YourCompany_YourModule_Block_Customer_Grid</customer_grid> 
       </rewrite> 
      </adminhtml> 
     </blocks> 
    </global> 
</config> 

应用程序/代码/ [地方或社区]/YourCompany/YourModule /块/客户/Grid.php

<?php 

class YourCompany_YourModule_Block_Customer_Grid extends Mage_Adminhtml_Block_Customer_Grid 
{ 
    public function setCollection($collection) 
    { 
     $collection->addAttributeToSelect('confirmation');      
     parent::setCollection($collection); 
    } 

    protected function _prepareColumns() 
    { 
     parent::_prepareColumns(); 

     $this->addColumn('confirmation', array(
       'header'=> Mage::helper('sales')->__('Confirmed'), 
       'index' => 'confirmation', 
       'type' => 'text', 
       'width' => '100px', 
     )); 
     return parent::_prepareColumns(); 
    } 
} 

详细解释可以在这里找到:

http://tipsmagento.blogspot.com/2011/03/add-new-column-on-customers-grid.html

+0

@kleopatra谢谢。我已经更新了答案。 – 2013-10-17 10:50:56

相关问题