美文网首页
[译]magento给用户grid表增加新的column

[译]magento给用户grid表增加新的column

作者: jimxu | 来源:发表于2017-10-23 11:01 被阅读65次

英文原文:http://magento.stackexchange.com/questions/5973/adding-columns-to-customer-grid-using-observer-or-overriding-the-customer-grid

为了给用户grid新增一个column,需要重写block:Mage_Adminhtml_Block_Customer_Grid,并覆写block里的两个方法:
- _prepareCollection:添加你的属性到collection中
- _prepareColumns:添加column到grid中

新建模块并配置

先新建一个模块Easylife_Customer,修改

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Customer>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Customer /><!-- 添加的模块依赖该核心模块 -->
                <Mage_Adminhtml /><!-- 添加的模块依赖该核心模块 -->
            </depends>
        </Easylife_Customer>
    </modules>
</config>
    ```
    
# 修改配置文件

``` xml app/code/local/Easylife/Customer/etc/config.xml
<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Customer>
            <version>0.0.1</version>
        </Easylife_Customer>
    </modules>
    <global>
        <blocks>
            <adminhtml>
                <rewrite>
                    <customer_grid>Easylife_Customer_Block_Adminhtml_Customer_Grid</customer_grid><!-- 用我们自己建立的Easylife_Customer_Block_Adminhtml_Customer_Grid覆写原有的用户block -->
                </rewrite>
            </adminhtml>
        </blocks>
    </global>
</config>

编辑block文件

<?php
class Easylife_Customer_Block_Adminhtml_Customer_Grid extends Mage_Adminhtml_Block_Customer_Grid{
    /**
     * 覆写_prepareCollection方法新增一个属性到collection中
     * @return $this
     */
    protected function _prepareCollection(){
        $collection = Mage::getResourceModel('customer/customer_collection')
            ->addNameToSelect()
            ->addAttributeToSelect('email')
            ->addAttributeToSelect('created_at')
            ->addAttributeToSelect('group_id')
            //如果你要添加的属性是用户自身的属性,那么用下面的语句
            ->addAttributeToSelect('mobile')
            //如果你要添加的属性是用户地址表中的,参考下面的语句
            //->joinAttribute('mobile', 'customer_address/mobile', 'default_billing', null, 'left')
            ->joinAttribute('billing_postcode', 'customer_address/postcode', 'default_billing', null, 'left')
            ->joinAttribute('billing_city', 'customer_address/city', 'default_billing', null, 'left')
            ->joinAttribute('billing_telephone', 'customer_address/telephone', 'default_billing', null, 'left')
            ->joinAttribute('billing_region', 'customer_address/region', 'default_billing', null, 'left')
            ->joinAttribute('billing_country_id', 'customer_address/country_id', 'default_billing', null, 'left');

        $this->setCollection($collection);
        //下面是替换了原有的parent::_prepareCollection的代码,原有的代码是调用了Mage_Adminhtml_Block_Customer_Grid的父类即Mage_Adminhtml_Block_Widget_Grid中的代码        
        //直接调用 parent::_prepareCollection 会使得上面的代码失效。
        //而你又不能用这种语法来调用父类的父类的方法 parent::parent::_prepareCollection(),所以就只能将代码整个copy到此处
        if ($this->getCollection()) {

            $this->_preparePage();

            $columnId = $this->getParam($this->getVarNameSort(), $this->_defaultSort);
            $dir      = $this->getParam($this->getVarNameDir(), $this->_defaultDir);
            $filter   = $this->getParam($this->getVarNameFilter(), null);

            if (is_null($filter)) {
                $filter = $this->_defaultFilter;
            }

            if (is_string($filter)) {
                $data = $this->helper('adminhtml')->prepareFilterString($filter);
                $this->_setFilterValues($data);
            }
            else if ($filter && is_array($filter)) {
                $this->_setFilterValues($filter);
            }
            else if(0 !== sizeof($this->_defaultFilter)) {
                $this->_setFilterValues($this->_defaultFilter);
            }

            if (isset($this->_columns[$columnId]) && $this->_columns[$columnId]->getIndex()) {
                $dir = (strtolower($dir)=='desc') ? 'desc' : 'asc';
                $this->_columns[$columnId]->setDir($dir);
                $this->_setCollectionOrder($this->_columns[$columnId]);
            }

            if (!$this->_isExport) {
                $this->getCollection()->load();
                $this->_afterLoadCollection();
            }
        }

        return $this;
    }

    /**
     * 覆写_prepareColumns方法在email列后面新增一列    
     * 如果你想要改变新增列的位置,那么直接修改addColumnAfter方法的第三个参数就好了     
     */
    protected function _prepareColumns(){
        $this->addColumnAfter('mobile', array(
            'header'    => Mage::helper('customer')->__('Mobile'),
            'index'     => 'mobile'
        ),'email');
        return parent::_prepareColumns();
    }
}

相关文章

  • [译]magento给用户grid表增加新的column

    英文原文:http://magento.stackexchange.com/questions/5973/addi...

  • grid items

    grid-column-start | | | grid-column-e...

  • css grid网格布局

    display: grid; display: inline-grid; grid-template-column...

  • 数据库表操作

    1、给数据库表增加字段属性:alter table xxx add column *** varchar(100)...

  • 笔记 - Grid布局

    Grid row column start end grid-template-areas 利用标签直接划分区域

  • Oracle导入数据库

    先创建用户 oracle数据检查各个表空间的路劲及其使用率 重新给某个表空间扩容 增加新的数据文件

  • Grid学习笔记

    学习Grid布局中的一些笔记。参考:GRID GARDEN grid-column-start属性 网格中从左起第...

  • 竖线

  • 创建表空间和用户

    oracle em地址: 创建临时表空间 创建数据表空间 创建用户并指定表空间 给用户授予权限 增加表空间大小 删...

  • SQL - Alter用法总结

    一、修改表结构和字段值 1、增加列 Alter table 表名 add column 字段名 字段定义 例子:A...

网友评论

      本文标题:[译]magento给用户grid表增加新的column

      本文链接:https://www.haomeiwen.com/subject/ifwouxtx.html