Magento2: Добавьте код купона столбца заказа на продажу в сетку заказов на продажу


В таблице sales_order у нас есть столбец coupon_code. Мне нужно показать это в сетке заказов на продажу.

Я добавил код купона столбца, переопределив файл sales_order_grid.xml. Отображается столбец. Теперь мне нужно показать значения sales_order.coupon_code.

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">
        <column name="coupon_code">
            <argument name="data" xsi:type="array">
            <item name="js_config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
            </item>
            <item name="config" xsi:type="array">
                <item name="visible" xsi:type="boolean">true</item>
                <item name="dataType" xsi:type="string">text</item>
                <item name="align" xsi:type="string">left</item>
                <item name="label" xsi:type="string" translate="true">Coupon Code</item>
            </item>
        </argument>
        </column>
    </columns>
</listing>  

Module/etc/di.xml :

<?xml version="1.0"?>                                                   
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid" type="Magento\Sales\Model\ResourceModel\Grid">
    <arguments>
        <argument name="columns" xsi:type="array">
            <item name="coupon_code" xsi:type="string">sales_order.coupon_code</item>
        </argument>
    </arguments>
</virtualType>  
</config>
Author: Sufyan Khot, 2019-03-05

3 answers

ИЗМЕНИТЬ:

Добавить или добавить InstallSchema.php из этого пути вашего пользовательского модуля:

Vendor/Module/Setup/InstallSchema.php

<?php

namespace vendor\module\Setup;

use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;

class InstallSchema implements InstallSchemaInterface
{

/**
 * {@inheritdoc}
 * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
 */
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
    $installer = $setup;

    $installer->startSetup();

    /* While module install, creates column in sales_order_grid table */

    $eavTable = $installer->getTable('sales_order_grid');

    $columns = [
        'coupon_code' => [
            'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            'nullable' => true,
            'comment' => 'Coupon Code',
        ],
    ];

    $connection = $installer->getConnection();
    foreach ($columns as $name => $definition) {
        $connection->addColumn($eavTable, $name, $definition);
       }

    $installer->endSetup();
}
}

Затем после этого вам нужно сопоставить столбец coupon_code с столбцом sales_order в вашем di.xml конфигурация:

<virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid" type="Magento\Sales\Model\ResourceModel\Grid">
    <arguments>
        <argument name="columns" xsi:type="array">
            <item name="coupon_code" xsi:type="string">sales_order.coupon_code</item>
        </argument>
    </arguments>
</virtualType>  

Затем в вашем 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">
        <column name="coupon_code">
            <argument name="data" xsi:type="array">
            <item name="js_config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
            </item>
            <item name="config" xsi:type="array">
                <item name="visible" xsi:type="boolean">true</item>
                <item name="dataType" xsi:type="string">text</item>
                <item name="align" xsi:type="string">left</item>
                <item name="label" xsi:type="string" translate="true">Coupon Code</item>
            </item>
        </argument>
        </column>
    </columns>
</listing>   

Примечание: обязательно выполняйте команды после внесения изменений выше:
настройка: обновление
настройка: статический контент: развертывание -f

 2
Author: fmsthird, 2019-03-06 06:48:24

Попробуйте это,

Добавить di.xml в

App/code/vendor/module/etc/di.xml

Добавьте в него приведенный ниже код

<?xml version="1.0"?>                                                   
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid" type="Magento\Sales\Model\ResourceModel\Grid">
<arguments>                                                           
<argument name="columns">
        <item name="salesperson" xsi:type="string">sales_order.coupon_code</item>
</argument>
</arguments>                                                    
</virtualType>
</config>

Надеюсь, это поможет:)

 1
Author: Prathap Gunasekaran, 2019-03-05 12:30:11

Для новых заказов с помощью определения виртуального типа: - di.xml выше (скопируйте на лету значения из таблицы sales_order в sales_order_grid )

Для существующих заказов : Я не нашел совета, поэтому решение вы можете найти ниже.

Решение: Нам нужно скопировать значения из таблицы sales_order в таблицу sales_order_grid.

Следуя практике Magento 2.3*, мы сделаем это во время установки модуля из программы установки/Исправления/Данных вашего модуля.

Реализацию можно найти на github: https://github.com/iop/magento2-order-grid.git

 0
Author: Ocheretnyi, 2020-04-26 07:15:27