Question

I want to change display order of my newly added column in order view in Magento 2.

enter image description here

i have tried bellow code in Vendor/Module/view/adminhtml/layout/sales_order_view.xml but it wont work.

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <!-- <referenceBlock name="order_items">
            <arguments>
                <argument name="columns" xsi:type="array">
                    <item name="product" xsi:type="string" translate="true">Product</item>
                    <item name="status" xsi:type="string" translate="true">Item Status</item>
                    <item name="price-original" xsi:type="string" translate="true">Original Price</item>
                    <item name="price" xsi:type="string" translate="true">Price</item>
                    <item name="assembly" xsi:type="string" translate="true">Assembly Charges</item>
                    <item name="ordered-qty" xsi:type="string" translate="true">Qty</item>
                    <item name="subtotal" xsi:type="string" translate="true">Subtotal</item>
                    <item name="tax-amount" xsi:type="string" translate="true">Tax Amount</item>
                    <item name="tax-percent" xsi:type="string" translate="true">Tax Percent</item>
                    <item name="discont" xsi:type="string" translate="true">Discount Amount</item>
                    <item name="total" xsi:type="string" translate="true">Row Total</item>
                </argument>
            </arguments>
            <referenceBlock name="default_order_items_renderer">
                <arguments>
                    <argument name="columns" xsi:type="array">
                        <item name="product" xsi:type="string" translate="false">col-product</item>
                        <item name="status" xsi:type="string" translate="false">col-status</item>
                        <item name="price-original" xsi:type="string" translate="false">col-price-original</item>
                        <item name="price" xsi:type="string" translate="false">col-price</item>
                        <item name="assembly" xsi:type="string" translate="false">col-assembly</item>
                        <item name="qty" xsi:type="string" translate="false">col-ordered-qty</item>
                        <item name="subtotal" xsi:type="string" translate="false">col-subtotal</item>
                        <item name="tax-amount" xsi:type="string" translate="false">col-tax-amount</item>
                        <item name="tax-percent" xsi:type="string" translate="false">col-tax-percent</item>
                        <item name="discont" xsi:type="string" translate="false">col-discont</item>
                        <item name="total" xsi:type="string" translate="false">col-total</item>
                    </argument>
                </arguments>
            </referenceBlock>
        </referenceBlock> -->
        <referenceBlock name="order_items">
            <arguments>
                <argument name="columns" xsi:type="array">
                    <item name="assembly" xsi:type="string" translate="true">Assembly Charges</item>
                </argument>
            </arguments>
            <referenceBlock name="default_order_items_renderer">
                <arguments>
                    <argument name="columns" xsi:type="array">
                        <item name="assembly" xsi:type="string" translate="true">col-assembly</item>
                    </argument>
                </arguments>
            </referenceBlock>
         </referenceBlock>
     </body>
 </page>
Was it helpful?

Solution

Create di.xml for at this below path :

app/code/Vendor/Module/etc/adminhtml/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">
    <type name="Magento\Sales\Block\Adminhtml\Order\View\Items">
        <plugin name="change-order-view-columns" type="Vendor\Module\Plugin\Items" sortOrder="10"/>
    </type>
</config>

Create Items.php plugin file for that :

app/code/Vendor/Module/Plugin/Items.php

<?php

namespace Vendor\Module\Plugin;

class Items
{
    /**
     * @param \Magento\Sales\Block\Adminhtml\Order\View\Items $subject
     * @param $result
     * @return array
     */
    public function afterGetColumns(
        \Magento\Sales\Block\Adminhtml\Order\View\Items $subject,
        $result
    )
    {
        $result = $this->changeColumnPosition($result, 10, 4);
        return $result;
    }

    /**
     * @param $items
     * @param $a
     * @param $b
     * @return array
     */
    public function changeColumnPosition($items, $a, $b)
    {
        $elem1 = array_splice($items, $a, 1);
        $elem2 = array_splice($items, 0, $b);
        return array_merge($elem2,$elem1,$items);
    }
}

Clean cache and check it.

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top