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>
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
Попробуйте это,
Добавить 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>
Надеюсь, это поможет:)
Для новых заказов с помощью определения виртуального типа:
- di.xml выше (скопируйте на лету значения из таблицы sales_order
в sales_order_grid
)
Для существующих заказов : Я не нашел совета, поэтому решение вы можете найти ниже.
Решение:
Нам нужно скопировать значения из таблицы sales_order
в таблицу sales_order_grid
.
Следуя практике Magento 2.3*, мы сделаем это во время установки модуля из программы установки/Исправления/Данных вашего модуля.
Реализацию можно найти на github: https://github.com/iop/magento2-order-grid.git