Ich versuche, eine neue Spalte zum Bestellraster in Magento 2.0 hinzuzufügen. Also muss ich mich anschließen, um die Rastersammlung zu bestellen. Wie kann ich das erreichen? In Magento2 verwendet das Raster eine UI-Komponente.
quelle
Ich versuche, eine neue Spalte zum Bestellraster in Magento 2.0 hinzuzufügen. Also muss ich mich anschließen, um die Rastersammlung zu bestellen. Wie kann ich das erreichen? In Magento2 verwendet das Raster eine UI-Komponente.
Magento 2 fügt dem Kundenauftragsraster benutzerdefinierte Spalten hinzu.
Beitreten
Magento \ Sales \ Order \ Grid \ Collection
Für alle Tabellen ist die Verwendung eines Plugins die beste Option, da dies nicht auf Umschreibungen beruht und den Code schlank macht.
Erstellen Sie das Plugin in der Datei etc / di.xml Ihres Moduls
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
<plugin name="sales_order_additional_columns" type="Vendor\ModuleName\Plugins\AddColumnsSalesOrderGridCollection" sortOrder="100" disabled="false" />
</type>
Also fangen wir ab
Magento \ Framework \ View \ Element \ UiComponent \ DataProvider \ CollectionFactory
denn wenn du dir das anschaust
Magento \ Sales \ etc \ di.xml
du würdest sehen
Magento \ Sales \ Order \ Grid \ Collection
wurde injiziert
Magento \ Framework \ View \ Element \ UiComponent \ DataProvider \ CollectionFactory
Erstellen Sie einen Plugin-Ordner und eine Plugin-Klasse in Ihrem Modul
<?php namespace Vendor\ModuleName\Plugins;
use Magento\Framework\Message\ManagerInterface as MessageManager;
use Magento\Sales\Model\ResourceModel\Order\Grid\Collection as SalesOrderGridCollection;
class AddColumnsSalesOrderGridCollection
{
private $messageManager;
private $collection;
public function __construct(MessageManager $messageManager,
SalesOrderGridCollection $collection
) {
$this->messageManager = $messageManager;
$this->collection = $collection;
}
public function aroundGetReport(
\Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory $subject,
\Closure $proceed,
$requestName
) {
$result = $proceed($requestName);
if ($requestName == 'sales_order_grid_data_source') {
if ($result instanceof $this->collection
) {
$select = $this->collection->getSelect();
$select->join(
["soi" => "sales_order_item"],
'main_table.entity_id = soi.order_id AND soi.product_type="simple"',
array('weight', 'product_type')
)
->distinct();
$select->join(
["soa" => "sales_order_address"],
'main_table.entity_id = soa.parent_id AND soa.address_type="shipping"',
array('email', 'country_id', 'postcode', 'city', 'telephone')
)
->distinct();
}
}
return $this->collection;
}
}
Hier beobachten wir um Fall getReport () -Methode.
Kopieren
vendor / magento / module-sales / view / adminhtml / ui_component / sales_order_grid.xml
zum Umfang Ihres Moduls
Vendor / ModuleName / view / adminhtml / ui_component / sales_order_grid.xml
Löschen Sie alle Inhalte Ihrer kopierten sales_order_grid.xml, da wir nicht alle Inhalte überschreiben möchten.
Geben Sie den folgenden Code in die Datei sales_order_grid.xml Ihres Moduls ein
<?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="sales_order_columns">
<!-- sales_order_item weight -->
<column name="weight">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Weight</item>
<item name="sortOrder" xsi:type="number">222</item>
<item name="align" xsi:type="string">right</item>
<item name="filter" xsi:type="string">text</item>
<item name="visible" xsi:type="boolean">true</item>
<!--<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>-->
</item>
</argument>
</column>
<!-- sales_order_item product_type-->
<column name="product_type">
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">Vendor\ModuleName\Ui\Component\Listing\Column\ProductTypes</item>
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Product Type</item>
<item name="sortOrder" xsi:type="number">232</item>
<item name="align" xsi:type="string">right</item>
<!--<item name="filter" 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="visible" xsi:type="boolean">true</item>
<!--<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>-->
</item>
</argument>
</column>
<!-- sales_order_address country_id -->
<column name="country_id">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Country ID</item>
<item name="sortOrder" xsi:type="number">242</item>
<item name="align" xsi:type="string">right</item>
<item name="filter" xsi:type="string">text</item>
<item name="visible" xsi:type="boolean">true</item>
<!--<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>-->
</item>
</argument>
</column>
<!-- sales_order_address post_code -->
<column name="postcode">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Postcode</item>
<item name="sortOrder" xsi:type="number">252</item>
<item name="align" xsi:type="string">right</item>
<item name="filter" xsi:type="string">text</item>
<item name="visible" xsi:type="boolean">true</item>
<!--<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>-->
</item>
</argument>
</column>
<!-- sales_order_address city -->
<column name="city">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">City</item>
<item name="sortOrder" xsi:type="number">252</item>
<item name="align" xsi:type="string">right</item>
<item name="filter" xsi:type="string">text</item>
<item name="visible" xsi:type="boolean">true</item>
<!--<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>-->
</item>
</argument>
</column>
<!-- sales_order_address telephone -->
<column name="telephone">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Telephone</item>
<item name="sortOrder" xsi:type="number">252</item>
<item name="align" xsi:type="string">right</item>
<item name="filter" xsi:type="string">text</item>
<item name="visible" xsi:type="boolean">true</item>
<!--<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>-->
</item>
</argument>
</column>
</columns>
</listing>
Löschen Sie jetzt den Cache aus dem Ordner var / cache oder aktualisieren Sie Ihren Cache. Sie können Ihre hinzugefügten Spalten im Kundenauftragsraster sehen.
["soi" => "sales_order_item"]
und hinzufügen musste["soa" => "sales_order_address"]
.Wenn Sie sich
\Magento\Framework\Data\Collection\AbstractDb
magento2 selbst ansehen, stellen Sie eine Hook-Operation für Ihre Sammlung bereit.Also, was Sie dazu tun müssen, indem Sie einfach Ihre Sammlung hinzufügen [
NAMESPACE\MODULENAME\Model\ResourceModel\YOUR_CLASSNAME\Grid\Collection
]quelle
_renderFiltersBefore
können Sie auch überschreiben / erweitern_initSelect
.Ich habe ein Admin-Raster erstellt, das aus zwei benutzerdefinierten Tabellen besteht. Sie können dies nicht tun, indem Sie den virtuellen Typ di.xml verwenden. Befolgen Sie daher diese Schritte und aktualisieren Sie Ihre
etc / di.xml,
Model / Resource / Modulename / Collection.php Join in dieser Datei hinzufügen,
Modell / Ressource / Modulname / Grid / Collection.php,
IN Ihrer etc / di.xml
IN Ihrem Model / Resource / Modulename / Collection.php
IN Ihrem Model / Resource / Modulename / Grid / Collection.php
quelle
In der UI-Definition xml gibt es einen ähnlichen Datenquellenknoten
wo
listing_name_data_source
kann in Ihrer definiert werdendi.xml
oder nur eine Klasse direkt referenzieren. Die Klasse selbst sollte Ihre benutzerdefinierte Sammlung erweiternMagento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory
und alscollections
Argument haben . In der_initSelect()
Methode dieser Auflistungsklasse können Sie Ihre Tabellen verbinden.quelle
Wenn Sie Probleme mit der @ Asrar- Lösung haben, gehen Sie wie folgt vor :
Das scheint für mich in Ordnung zu sein.
quelle