Estou enfrentando um problema de adicionar uma coluna na grade do cliente e mostrar valores nessa coluna.
Aqui está o código do observador que eu tenho tentado mostrar na coluna:
if ($block->getType() == 'adminhtml/customer_grid') {
$customer = $observer->getCustomer();
$collection = Mage::getResourceModel('customer/customer_collection');
$block->addColumnAfter('mobile', array(
'header' => 'Mobile No.',
'type' => 'text',
'index' => 'mobile',
), 'email');
}
Isso adiciona a coluna, mas nenhum valor é mostrado abaixo disso.
magento-1.7
customer
grid
grid-serlization
Kuldeep
fonte
fonte
$block->getCollection()
Respostas:
Para adicionar uma coluna à grade do cliente, é necessário substituir duas coisas no bloco
Mage_Adminhtml_Block_Customer_Grid
._prepareCollection
- para adicionar seu atributo na coleção_prepareColumns
- para adicionar a coluna na sua grade.Para isso, você deve criar uma nova extensão. Vamos chamá-lo
Easylife_Customer
. Para isso, você precisará dos seguintes arquivos:app/etc/module/Easylife_Customer.xml
- o arquivo de declaraçãoapp/code/local/Easylife/Customer/etc/config.xml
- o arquivo de configuraçãoapp/code/local/Easylife/Customer/Block/Adminhtml/Customer/Grid.php
- sua própria versão da grade do cliente. Leia meus comentários no código:Limpe o cache e você deve estar pronto.
fonte
Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
A maneira dos observadores:
Declare 2 observadores em seu arquivo config.xml: um para adicionar sua coluna ao bloco de grade e o outro para carregar dados do atributo correspondente:
Crie uma classe Observer com métodos apropriados:
fonte
Eu respondo ao comentário de Alex:
Para exportar em CSV também use
ao invés de
fonte
Supondo que
$block
é uma instância deMage_Adminhtml_Block_Customer_Grid
então$block->getCollection()
deve retornar uma coleção de clientes usada na grade da qual é uma instânciaMage_Customer_Model_Resource_Customer_Collection
. Quando você olhar para o códigoMage_Adminhtml_Block_Customer_Grid::_prepareCollection()
, verá como pode adicionar um atributo a essa coleção.Deve ser (embora não testado)
assumindo que há um atributo móvel adicionado à entidade do cliente
ou se o celular é um atributo adicionado à entidade do endereço de cobrança
fonte
Mage_Adminhtml_Block_Widget_Grid::_prepareCollection
isso é chamado:$this->getCollection()->load()
. Isso significa que qualquer outra modificação na coleção é ignorada. Mas, como eu disse, essa é uma abordagem muito boa para exportar uma grade. Ao fazer uma exportação, oload
método não é chamado até muito mais tarde.Outra maneira:
Reescreva o bloco de grade do cliente com seu módulo personalizado e use a
setCollection()
função para buscar seu atributo personalizado.app / code / [local or community] /YourCompany/YourModule/etc/config.xml
app / code / [local or community] /YourCompany/YourModule/Block/Customer/Grid.php
fonte
addColumnsOrder
função Por favor, verifique a resposta atualizada.Eu precisava remover algumas colunas padrão e adicionar colunas adicionais na grade do cliente. Eu decidi fazer as colunas configuráveis. Primeiro, adicionei duas caixas de seleção múltipla no system.xml :
Os modelos de origem são diretos:
O segundo modelo de origem
Em seguida, substitua a classe de grade:
fonte