Wie man eine benutzerdefinierte Spalten, um die Magento 2 Produkte Gitter hinzufügen?

How To Add Custom Column In Magento 2 Products Grid

Jeder Wert, den Sie einem Produkt hinzufügen und in der Produkttabelle anzeigen möchten, ist nicht allzu schwierig. Sie können dies tun, indem Sie die folgenden Schritte ausführen:

Wie füge ich eine Spalte in ein Produkt ein?

Schritt 1 : Ein Modul erstellen

Zuerst müssen Sie ein Modul erstellen. Dazu müssen Sie eine registration.php und eine module.xml erstellen. Wir beginnen mit registration.php und erstellen diese Datei im Verzeichnis app/code/Bay20/Custom. Hier ist Bay20 der Name des Anbieters und Custom der Name des Moduls.

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Bay20_Custom',
    __DIR__
);

jetzt erstellen app/code/Bay20/Custom/etc/module.xml.

<?xml version="1.0" encoding="utf-8" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Bay20_Custom" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Catalog"/>
        </sequence>
    </module>
</config>

Nachdem Sie beide Dateien erstellt haben, führen Sie die Befehle aus,

php bin/magento module:enable Bay20_CustomColumn

und

php bin/magento setup:upgrade

Schritt 2 : Benutzerdefinierte Spalte zum Produktraster hinzufügen

Um eine benutzerdefinierte Spalte zu erstellen, benötigen Sie die Auflistung UI-Komponente Instanz namens Product_listing und xml Konfigurationsdatei Magento_Catalog/view/adminhtml/ui_component/product_listing.xml.

Um diese Datei anzupassen, müssen Sie eine Datei in app/code/Bay20/Custom/view/adminhtml/ui_component/product_listing.xml erstellen

<?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="product_columns"> 
        <column name="manage_stock" component="Magento_Ui/js/grid/columns/select" sortOrder="76"> 
            <settings> 
                <addField>true</addField> 
                <options class="Magento\Config\Model\Config\Source\Yesno"/> 
                <filter>select</filter> 
                <dataType>select</dataType> 
                <sortable>false</sortable> 
                <label translate="true">Manage Stock</label> 
            </settings> 
        </column> 
    </columns> 
</listing>

Führen Sie nach dem Hinzufügen von Code diesen Befehl aus, um den Cache zu leeren:

php bin/magento cahe:clean

Sobald der Cache bereinigt ist, können Sie überprüfen, ob eine benutzerdefinierte Spalte in der Produkttabelle erstellt wurde.

Schritt 3 : Daten zur Produktsammlung hinzufügen

Um der Produktsammlung bestandsbezogene Daten hinzuzufügen, wird für die Instanz product_listing die Klasse data provider verwendet

Magento_Catalog/view/adminhtml/ui_component/product_listing.xml

<dataSource name="product_listing_data_source" component="Magento_Ui/js/grid/provider"> 
    <settings> 
        <storageConfig> 
            <param name="dataScope" xsi:type="string"> filters.store_id</param> 
        </storageConfig> 
        <updateUrl path="mui/index/render"/> 
    </settings> 
    <aclResource>Magento_Catalog::products</aclResource> 
    <dataProvider class="Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider" name="product_listing_data_source"> 
        <settings> 
            <requestFieldName>id</requestFieldName> 
            <primaryFieldName>entity_id</primaryFieldName> 
        </settings> 
    </dataProvider> 
</dataSource>

Sie können überprüfen, dass dataProvider eine Klasse der UI-Komponente dataSource ist.

Die Klasse des Datenanbieters hat zwei Klassen addFieldStrategies und addFilterStrategies. addField und addFilter sind jeweils zwei Methoden der beiden Klassen.

Verwaltung der Bestandsfeldstrategie

Mit dieser Strategie können Sie als erstes den Status der Bestandsverwaltung zur Produktsammlung hinzufügen.

Bay20\Custom\Ui\DataProvider\Product\AddManageStockFieldToCollection

<?php 
namespace Bay20\Custom\Ui\DataProvider\Product; 
class AddManageStockFieldToCollection implements \Magento\Ui\DataProvider\AddFieldToCollectionInterface 
{ 
    public function addField(\Magento\Framework\Data\Collection $collection, $field, $alias = null) 
    { 
        $collection->joinField('manage_stock', 'cataloginventory_stock_item', 'manage_stock', 'product_id=entity_id', null, 'left'); 
    } 
}

Die addField-Methode von AddFieldToCollectionInterface implementiert die AddManageStockFieldToCollection-Strategie. Die Spalte für die Bestandsverwaltung stammt aus der Tabelle cataloginventory_Stock_item, die eine Tabelle in der DB ist, und manage_stock ist eine Spalte in dieser Tabelle.

Verwalten der Bestandsfilterstrategie

Wenn Sie Gitterdaten nach dem Bestandsführungsstatus filtern möchten, benötigen Sie eine Bestandsfilterstrategie.

Bay20\Custom\Ui\DataProvider\Product\AddManageStockFilterToCollection

<?php 
namespace Bay20\Custom\Ui\DataProvider\Product; 
class AddManageStockFilterToCollection implements \Magento\Ui\DataProvider\AddFilterToCollectionInterface 
{ 
    public function addFilter(\Magento\Framework\Data\Collection $collection, $field, $condition = null) 
    { 
        if (isset($condition['eq'])) { 
            $collection->addFieldToFilter($field, $condition); 
        } 
    } 
}

addFilter-Methode von AddFilterToCollectionInterface implementiert AddManageStockFilterToCollection-Strategie.

Hinzufügen von Strategien zum Produktlistendatenanbieter

Nachdem Sie diese Strategien erstellt haben, fügen Sie diese Strategien dem Datenanbieter product_listing hinzu, um sie zu verwenden. Erstellen Sie dazu die Datei app/code/Bay20/Custom/etc/adminhtml/di.xml

<?xml version="1.0" encoding="utf-8" ?> 
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> 
    <type name="Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider"> 
        <arguments> 
            <argument name="addFieldStrategies" xsi:type="array"> 
                <item name="manage_stock" xsi:type="object">Bay20\Custom\Ui\DataProvider\Product\AddManageStockFieldToCollection</item> 
            </argument> 
            <argument name="addFilterStrategies" xsi:type="array"> 
                <item name="manage_stock" xsi:type="object">Bay20\Custom\Ui\DataProvider\Product\AddManageStockFilterToCollection</item> 
            </argument> 
        </arguments> 
    </type> 
</config>

Wenn Sie alle diese Schritte durchgeführt haben, vergessen Sie nicht, den Cache zu leeren,

php bin/magento cache:clean config

Nachdem Sie diesen Befehl ausgeführt haben, können Sie überprüfen, ob die benutzerdefinierte Spalte mit Daten hinzugefügt wurde.

Schlussfolgerung:

Manchmal müssen Sie in den Tabellen Produktattribute und auch Spalten anzeigen, die keine Produktattribute sind. Zu diesem Zeitpunkt erstellen Sie eine benutzerdefinierte Spalte.

Bitte kontaktieren Sie uns unter manish@bay20.com oder rufen Sie uns unter +91-8800519180 an, wenn Sie Unterstützung für Magento 2 benötigen. Sie können auch die Magento2-Entwicklungsseite besuchen, um die von uns angebotenen Dienstleistungen zu überprüfen.