Magento 如何给后台Order列表添加字段

需求:需要在列表加上Dispatch Date 和 Delivery Time 两个字段,并在Filters 、 Columns、 Export 三块也相关显示。
如图:
在这里插入图片描述
开发思路: 因为order列表显示的是 sales_order_grid表中的数据,首先需要在表中添加这两个字段;其次要将两个字段的新数据自动更新到表中;最后将之前的老数据全部从sales_order表中更新到sales_order_grid表中。

开发步骤:

  1. 添加字段:
<table name="sales_order_grid" resource="sales">
        <column xsi:type="timestamp" name="dispatch_time" on_update="false" nullable="true" comment="Dispatch Time"/>
        <column xsi:type="timestamp" name="delivery_time" on_update="false" nullable="true" comment="Delivery Time"/>
</table>
  1. 通过 di.xml 和 sales_order_grid.xml 文件同步更新数据
<virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid" type="Magento\Sales\Model\ResourceModel\Grid">
    <arguments>
        <argument name="columns" xsi:type="array">
            <item name="dispatch_time" xsi:type="string">sales_order.dispatch_time</item>
            <item name="delivery_time" xsi:type="string">sales_order.delivery_time</item>
        </argument>
    </arguments>
</virtualType>
<column name="dispatch_time" class="Magento\Ui\Component\Listing\Columns\Date">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="filter" xsi:type="string">dateRange</item>
            <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
            <item name="dataType" xsi:type="string">date</item>
            <item name="label" xsi:type="string" translate="true">Dispatch Date</item>
            <item name="dateFormat" xsi:type="string">MMM dd, YYYY, HH:mm:ss A</item>
        </item>
    </argument>
</column>
<column name="delivery_time" class="Magento\Ui\Component\Listing\Columns\Date">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="filter" xsi:type="string">dateRange</item>
            <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
            <item name="dataType" xsi:type="string">date</item>
            <item name="label" xsi:type="string" translate="true">Delivery Time</item>
            <item name="dateFormat" xsi:type="string">MMM dd, YYYY, HH:mm:ss A</item>
        </item>
    </argument>
</column>

3.通过编写脚本给新增字段导入旧数据

public function execute(InputInterface $input, OutputInterface $output)
{
        $startDate = $input->getOption('start_date') ?: '';
        $endDate = $input->getOption('end_date') ?: '';
        $totalCount = (int) $this->orderHelper->getOrders($startDate, $endDate)->count();
        $pages = (int) ceil($totalCount / self::PAGE_SIZE);
        $connection = $this->resourceConnection->getConnection();
        for ($page = 1; $page <= $pages; $page++) {
            $orders = $this->orderHelper->getOrders($startDate, $endDate, self::PAGE_SIZE, $page);
            foreach ($orders as $order) {
                $connection->beginTransaction();
                try {
                    $connection->update(
                        $connection->getTableName('sales_order_grid'),
                        [
                            'dispatch_time' => $order->getDispatchTime(),
                            'delivery_time' => $order->getDeliveryTime()
                        ],
                        ['increment_id = ?' => $order->getIncrementId(), 'entity_id = ?' => $order->getEntityId()]
                    );
                    $connection->commit();
                } catch (\Exception $e) {
                    $connection->rollBack();
                    return false;
                }
            }
        }
}

public function getOrders($startDate = '', $endDate = '', $pageSize = 0, $page = 1)
{
    $collection = $this->orderCollectionFactory->create()
        ->addFieldToSelect(['increment_id', 'entity_id', 'dispatch_time', 'delivery_time']);

    if ($startDate) {
        $collection->addFieldToFilter('created_at', ['gteq' => $startDate]);
    }
    if ($endDate) {
        $collection->addFieldToFilter('created_at', ['lteq' => $endDate]);
    }

    if ($pageSize > 0) {
        $collection->setPageSize($pageSize);
        $collection->setCurPage($page);
    }
    return $collection;
}
  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值