如何在 Magento 2中添加自定义列以排序网格

在本教程中,今天我将解释如何添加一个自定义列的顺序网格在 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();
    }
}

现在,进行缓存清理,您将成功在订单网格中显示自定义列。 总之,您可以使用此代码在销售订单网格中添加任何其他列字段。

Coupon and Coupon Rule Name

参考案例:

  1. https://webkul.com/blog/add-custom-columns-to-order-grid-in-admin-magento-2/