Saya mencoba menambahkan kolom baru untuk memesan kisi di Magento 2.0. Jadi, saya perlu bergabung untuk memesan koleksi grid. Bagaimana saya bisa mencapai ini? Karena, di magento2, kisi-kisi menggunakan komponen UI.
sumber
Saya mencoba menambahkan kolom baru untuk memesan kisi di Magento 2.0. Jadi, saya perlu bergabung untuk memesan koleksi grid. Bagaimana saya bisa mencapai ini? Karena, di magento2, kisi-kisi menggunakan komponen UI.
Magento 2 menambahkan kolom khusus ke kisi pesanan penjualan,
Bergabung
Koleksi Magento \ Sales \ Order \ Grid \
ke tabel mana saja, menggunakan plugin akan menjadi pilihan terbaik karena ini tidak bergantung pada penulisan ulang dan membuat kode lebih ramping.
Buat plugin di etc / di.xml modul Anda
<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>
Jadi, kami sedang mencegat
Magento \ Framework \ View \ Element \ UiComponent \ DataProvider \ CollectionFactory
karena jika Anda melihat
Magento \ Penjualan \ dll \ di.xml
kamu akan melihat
Koleksi Magento \ Sales \ Order \ Grid \
disuntikkan ke
Magento \ Framework \ View \ Element \ UiComponent \ DataProvider \ CollectionFactory
Buat folder Plugin dan kelas plugin di modul Anda
<?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;
}
}
Di sini kita mengamati sekitar acara metode getReport ().
Salinan
vendor / magento / modul-sales / view / adminhtml / ui_component / sales_order_grid.xml
ke ruang lingkup modul Anda
Vendor / ModuleName / view / adminhtml / ui_component / sales_order_grid.xml
Hapus semua konten sales_order_grid.xml yang Anda salin karena kami tidak ingin menimpa semua konten.
Masukkan kode berikut di sales_order_grid.xml modul Anda
<?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>
Sekarang, hapus cache dari folder var / cache atau segarkan cache Anda. Anda dapat melihat kolom yang ditambahkan di kotak pesanan penjualan.
["soi" => "sales_order_item"]
dan["soa" => "sales_order_address"]
.Ketika Anda melihat
\Magento\Framework\Data\Collection\AbstractDb
magento2 sendiri menyediakan operasi hook untuk koleksi Anda.Jadi, apa yang perlu Anda lakukan ini hanya dengan menambahkan koleksi Anda [
NAMESPACE\MODULENAME\Model\ResourceModel\YOUR_CLASSNAME\Grid\Collection
]sumber
_renderFiltersBefore
, Anda juga dapat mengganti / memperluas_initSelect
.Saya membuat kisi admin yang menggabungkan dua tabel khusus. Anda tidak dapat melakukan ini dengan menggunakan tipe virtual di.xml, jadi Anda harus mengikuti langkah-langkah ini dan memperbarui
dll / di.xml,
Model / Resource / Modulename / Collection.php tambahkan bergabung dalam file ini,
Model / Sumber Daya / Modulename / Grid / Collection.php,
DI dll / di.xml Anda
DALAM Model / Sumber Daya / Modulename / Collection.php Anda
DALAM Model / Sumber Daya / Modulename / Grid / Collection.php Anda
sumber
Dalam definisi xui ui ada node sumber data mirip dengan ini
di mana
listing_name_data_source
dapat didefinisikan dalam Andadi.xml
atau hanya referensi kelas secara langsung. Kelas itu sendiri harus diperluas dariMagento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory
dan sebagaicollections
argumen koleksi khusus Anda. Dalam_initSelect()
metode kelas koleksi Anda dapat bergabung dengan tabel Anda.sumber
Bagi siapa pun yang memiliki masalah dengan solusi @ Asrar lakukan saja ini:
Ini sepertinya berfungsi baik untuk saya.
sumber