在本教程中,今天我将解释如何添加一个自定义列的顺序网格在 Magento 2。在 Magento 2中,Sales Order 网格提供了许多列,以方便地管理销售订单数据。但是,当需要在自定义列中添加额外数据时,需要以编程方式添加自定义列。
因此,在这里我添加了优惠券代码和优惠券规则名称列的销售订单网格。让我们遵循以下步骤。
1.假设您已经创建了一个简单的模块。 现在,在app/code/Yshuq/OrderColumn/view /adminhtml/ui_component /的网格中创建sales_order_grid.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="sales_order_columns">
<!-- Coupon Code Column -->
<column name="coupon_code">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Coupon Code</item>
</item>
</argument>
</column>
<!-- Coupon Rule Name Column -->
<column name="coupon_rule_name">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Coupon Rule Name</item>
</item>
</argument>
</column>
</columns>
</listing>
2. 现在,创建di.xml文件以将自定义列数据添加到位于app/code/Yshuq/ OrderColumn/etc/的订单网格数据源中,并粘贴以下代码
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
<arguments>
<argument name="collections" xsi:type="array">
<item name="sales_order_grid_data_source" xsi:type="string">RH\OrderColumn\Model\ResourceModel\Order\Grid\Collection</item>
</argument>
</arguments>
</type>
<type name="RH\OrderColumn\Model\ResourceModel\Order\Grid\Collection">
<arguments>
<argument name="mainTable" xsi:type="string">sales_order_grid</argument>
<argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order</argument>
</arguments>
</type>
</config>
3. 在app/code/Yshuq/OrderColumn/Model/ResourceModel/Order/Grid /中创建Collection.php文件,然后粘贴以下代码:
<?php
namespace Yshuq\OrderColumn\Model\ResourceModel\Order\Grid;
use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as CoreFetchStrategy;
use Magento\Framework\Data\Collection\EntityFactoryInterface as CoreEntityFactory;
use Magento\Framework\Event\ManagerInterface as CoreEventManager;
use Magento\Sales\Model\ResourceModel\Order\Grid\Collection as CoreSalesGrid;
use Psr\Log\LoggerInterface as Logger;
class Collection extends CoreSalesGrid
{
/**
* @param CoreEntityFactory $entityFactory
* @param Logger $logger
* @param CoreFetchStrategy $fetchStrategy
* @param CoreEventManager $eventManager
* @param string $mainTable
* @param string $resourceModel
*/
public function __construct(
CoreEntityFactory $entityFactory,
Logger $logger,
CoreFetchStrategy $fetchStrategy,
CoreEventManager $eventManager,
$mainTable = 'sales_order_grid',
$resourceModel = \Magento\Sales\Model\ResourceModel\Order::class
)
{
parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $mainTable, $resourceModel);
}
protected function _renderFiltersBefore()
{
$joinTable = $this->getTable('sales_order');
$this->getSelect()->joinLeft(
$joinTable,
'main_table.entity_id = sales_order.entity_id',
['coupon_code', 'coupon_rule_name']
);
parent::_renderFiltersBefore();
}
}
现在,进行缓存清理,您将成功在订单网格中显示自定义列。 总之,您可以使用此代码在销售订单网格中添加任何其他列字段。

参考案例: