Ich verwende den folgenden Code, um eine Spalte im Kundenraster in admin hinzuzufügen.
/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 ist ein Kundenattribut , das mit dem folgenden Code erstellt wurde.
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();
}
- Wenn ich Magecoder \ Magcustomer \ Ui \ Component \ Listing \ Column \ Showisapproved nicht verwende , wird die benutzerdefinierte Spalte leer.
Wenn ich aber verwende, muss ich mithilfe des Kundenmodells in der Funktion prepareDataSource abrufen, da die Variable $ dataSource keinen Wert für eine benutzerdefinierte Spalte enthält. Ist es möglich, Werte anzuzeigen, ohne erneut Daten abzurufen?
- Auch wenn ein Filter verwendet wird, wird ein SQL-Fehler generiert.
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
quelle
quelle
Antworten:
Lösung für Magento 2.1
Fügen Sie das Attribut dem Kundenrasterindex hinzu:
etc/indexer.xml
Beachten Sie, dass die Elemente "indexer" und "fieldset" nur die Attribute "id" und "name" haben. Die Struktur wird mit dem vorhandenen Indexer zusammengeführt.
Markieren Sie das Attribut als "im Raster verwendet".
Im Installationsprogramm:
Andernfalls wird während der Indizierung ein weiterer SQL-Fehler angezeigt, da der Indexer nach der Spalte in der
customer_entity
Haupttabelle sucht :quelle
Endlich die Lösung: Wir müssen die Datei indexer.xml im Ordner / etc / di erstellen .
Hauptsache view_id in view_id müssen wir " coloumn_name " übergeben, die wir im Raster anzeigen müssen.
Zum Beispiel muss ich hier den Spitznamen anzeigen, damit ich " Spitzname " in view_id übergeben habe .
Es funktioniert unter Magento 2.1.4
quelle
Fügen Sie dem Kundenraster eine benutzerdefinierte Spalte hinzu.
==> Bitte erstelle das erste Modul und folge dem folgenden Schritt ==> Nun haben wir das Plugin verwendet, bitte erstelle die Datei an der folgenden Stelle.
Anbieter / Modul / etc / di.xml
==> Erstellen Sie nun das Plugin, um die Tabelle mit Ihrer Sammlung zu verbinden, geben Sie die Sammlung zurück und erstellen Sie die Datei an der folgenden Stelle
Vendor / Module / Plugin / GridCustomerJoinCollection.php
==> Erstellen Sie nun den folgenden Ordner und die folgende Datei und fügen Sie die Spalten unter Vendor / Module / view / adminhtml / ui_component / customer_listing.xml hinzu
===> Jetzt bitte prüfen und bestätigen .
quelle
Ja, Sie müssen folgenden Code hinzufügen. Schritt 1: Erstellen Sie die Datei your_module / etc / indexer.xml
Jetzt müssen Sie den folgenden Befehl ausführen:
Befehl ausführen: php bin / magento indexer: reindex
Viel Glück
quelle
Ich habe die obige Lösung ausprobiert, aber sie funktioniert nicht
Aber nicht funktionieren Meine Frage ist also zunächst, wie wir sie überschreiben können
indexer.xml
.Nachdem ich Sie überprüft habe, welche Lösung Sie verwenden
Magento\Customer\Model\ResourceModel\Customer\Collection
undMagento_Customer/etc/indexer.xml
verwenden,Magento\Customer\Model\Indexer\Source
zeigt dies einen Fehler beim Indizieren an.Ich denke also, wir brauchen nicht nur Kundenattribute anzuwenden
Also brauche 'is_used_in_grid' => true und in di.xml hinzufügen
Oder
Und es funktioniert
quelle
Hier ist die Lösung. Lass mich wissen ob es funktioniert. Es funktioniert für mich wie ein Zauber. https://magento.stackexchange.com/a/237030/63460
quelle