Estou usando o código abaixo para adicionar uma coluna na grade do cliente em admin.
/app/code/Namespace/Module/view/adminhtml/ui_component/customer_listing.xml
<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<columns name="customer_columns" class="Magento\Customer\Ui\Component\Listing\Columns">
<column name="magcustomer_customer_approve" class="Namespace\Module\Ui\Component\Listing\Column\Showisapproved">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">select</item>
<item name="editor" xsi:type="string">select</item>
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
<item name="dataType" xsi:type="string">select</item>
<item name="label" xsi:type="string" translate="true">Is Approved</item>
<item name="sortOrder" xsi:type="number">51</item>
</item>
</argument>
</column>
</columns>
</listing>
/app/code/Namespace/Module/Ui/Component/Listing/Column/Showisapproved.php
<?php
namespace Namespace\Module\Ui\Component\Listing\Column;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Ui\Component\Listing\Columns\Column;
class Showisapproved extends Column
{
/**
*
* @param ContextInterface $context
* @param UiComponentFactory $uiComponentFactory
* @param array $components
* @param array $data
*/
public function __construct(
ContextInterface $context,
UiComponentFactory $uiComponentFactory,
array $components = [],
array $data = []
) {
parent::__construct($context, $uiComponentFactory, $components, $data);
}
/**
* Prepare Data Source
*
* @param array $dataSource
* @return array
*/
public function prepareDataSource(array $dataSource)
{
if (isset($dataSource['data']['items'])) {
foreach ($dataSource['data']['items'] as & $item) {
$item[$this->getData('name')] = 0;//Value which you want to display
}
}
return $dataSource;
}
}
magcustomer_customer_approve é o atributo do cliente criado usando o código abaixo.
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
/** @var CustomerSetup $customerSetup */
$customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType('customer');
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
/** @var $attributeSet AttributeSet */
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->addAttribute(Customer::ENTITY, 'magcustomer_customer_approve', [
'type' => 'int',
'label' => 'Is Approved',
'input' => 'select',
'required' => false,
'visible' => true,
'user_defined' => true,
'sort_order' => 1001,
'position' => 1001,
'system' => 0,
'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
'adminhtml_only'=>1,
'default'=>0
]);
$attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, 'magcustomer_customer_approve')
->addData([
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer'],
]);
$attribute->save();
}
- Se eu não usar o Magecoder \ Magcustomer \ Ui \ Component \ Listing \ Column \ Show é aprovado , a coluna personalizada ficará em branco.
Mas, se eu usar, preciso buscar o modelo do cliente na função prepareDataSource porque a variável $ dataSource não contém o valor da coluna personalizada. É possível mostrar valores sem buscar dados novamente?
- Além disso, quando o filtro é usado, um erro SQL é gerado.
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'magcustomer_customer_approve' in 'where clause' , query was: SELECT COUNT(*) FROM `customer_grid_flat` AS `main_table` WHERE (`magcustomer_customer_approve ` = '1') AND (`magcustomer_customer_approve` = '1') AND (`magcustomer_customer_approve` = '1') AND ( `magcustomer_customer_approve` = '1') AND (`magcustomer_customer_approve` = '1')
magento2
column
customer-grid
piyush_systematix
fonte
fonte
Respostas:
Solução para Magento 2.1
Adicione o atributo ao índice da grade do cliente:
etc/indexer.xml
Observe que os elementos "indexador" e "fieldset" possuem apenas os atributos "id" e "name", respectivamente. A estrutura é mesclada no indexador existente.
Marque o atributo como "usado na grade"
No instalador:
caso contrário, você receberá outro erro SQL durante a indexação, porque o indexador procura a coluna na
customer_entity
tabela principal:fonte
Finalmente consegui a solução: precisamos criar o arquivo indexer.xml na pasta / etc / di .
O principal é view_id em view_id, precisamos passar " coloumn_name ", que precisamos mostrar na grade.
Por exemplo, aqui eu preciso exibir o apelido para que eu tenha passado " apelido " em view_id .
Funciona no Magento 2.1.4
fonte
Adicione uma coluna personalizada na grade do cliente usando o caminho abaixo.
==> crie o primeiro módulo e siga a etapa abaixo ==> Agora nos acostumamos com o plug-in, por favor crie o arquivo no local abaixo.
Fornecedor / Módulo / etc / di.xml
==> Agora crie o plug-in para ingressar na tabela com sua coleção e retorne a coleção e crie o arquivo no local abaixo
Fornecedor / Módulo / Plugin / GridCustomerJoinCollection.php
==> Agora crie a pasta e o arquivo abaixo e adicione as colunas em Fornecedor / Módulo / view / adminhtml / ui_component / customer_listing.xml
===> Agora, por favor, chek e confirme .
fonte
Sim, você precisa adicionar o seguinte código. Etapa 1: Criar arquivo your_module / etc / indexer.xml
Agora você precisa abaixo do comando:
comando de execução: php bin / magento indexer: reindex
boa sorte
fonte
Eu tentei acima da solução, mas não está funcionando
Mas não está funcionando. Primeiro, minha pergunta é como podemos substituir
indexer.xml
?Depois que eu verifiquei a solução que você fonte
Magento\Customer\Model\ResourceModel\Customer\Collection
e noMagento_Customer/etc/indexer.xml
usoMagento\Customer\Model\Indexer\Source
e isso mostra erro durante a indexação.Acho que não precisamos pensar apenas em aplicar o atributo do cliente
Então precisa 'is_used_in_grid' => true e em di.xml adicione
Ou
E está funcionando
fonte
Aqui está a solução. Deixe-me saber se funciona. Funciona para mim como um encanto. https://magento.stackexchange.com/a/237030/63460
fonte