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.






