ম্যাজেন্টো 2 কিভাবে অর্ডার গ্রিডে একটি নতুন কলাম যুক্ত করবেন


20

আমি টেবিলে একটি নতুন কলাম যুক্ত করেছি sales_orderনামক export_statusএখন আমি নতুন থেকে নেওয়া ডেটা দিয়ে নতুন অর্ডার গ্রিড কলাম যোগ করতে চান sales_orderকলাম।

আমি the sales_order_gridটেবিলে কলাম যুক্ত করতে পেরেছি ।

$installer->getConnection()->addColumn($installer->getTable("sales_order_grid"), "xml_exported", [
     'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
     'comment' => 'XML Exported'
]);

sales_order export_statusকলামের মান সহ আমি এখন এটি কীভাবে অর্ডার গ্রিডে প্রদর্শন করতে পারি ?


আপনি উত্তরটি খুঁজে পেতে পারেন magento.stackexchange.com/questions/87012/…
কৃষ্ণ ইজ্জাদ

আমি মনে করি কোনও পর্যবেক্ষককে প্রয়োগ না করে এবং ইভেন্টগুলি ব্যবহার না করে এটি করার আরও ভাল উপায় আছে।
আন্দ্রে ফেরাজ

এই নিবন্ধটি ধাপে ধাপে বিক্রয় আদেশ গ্রিড কলাম যোগ বর্ণনা sivaschenko.com/magento2/2016/03/05/...
Sergii Ivashchenko

সমাধানটি এখানে চেষ্টা করুন এই পদ্ধতিটি কলাম যুক্ত করতে প্লাগইন ব্যবহার করে।
আসরার

আমার মনে হয় আপনি এই পরীক্ষা করা উচিত: একটি ভাল টিউটোরিয়াল sivaschenko.com/magento2-sales-order-grid-column
আবিদ মালিক

উত্তর:


42

ম্যাজেন্টো কোর কোডে প্রচুর খনন করার পরে আমি আমার প্রশ্নের সমাধান পেয়েছি। ডাটাবেসের মাধ্যমে গ্রিডে একটি কলাম যোগ করার পরিবর্তে, আমি একটি UI 'তে উপাদান নির্মিত sales_order_grid.xmlঅধীনে[COMPANY]/[MODULE]/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">
        <column name="export_status" class="[COMPANY]\[MODULE]\Ui\Component\Listing\Column\Status">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="visible" xsi:type="boolean">true</item>
                    <item name="label" xsi:type="string" translate="true">XML Exported</item>
                </item>
            </argument>
        </column>
    </columns>
</listing>

তারপরে ইউআই ক্লাসটি তৈরি করে [COMPANY]/[MODULE]/Ui/Component/Listing/Column/Status.php

namespace [COMPANY]\[MODULE]\Ui\Component\Listing\Column;

use \Magento\Sales\Api\OrderRepositoryInterface;
use \Magento\Framework\View\Element\UiComponent\ContextInterface;
use \Magento\Framework\View\Element\UiComponentFactory;
use \Magento\Ui\Component\Listing\Columns\Column;
use \Magento\Framework\Api\SearchCriteriaBuilder;

class Status extends Column
{
    protected $_orderRepository;
    protected $_searchCriteria;

    public function __construct(ContextInterface $context, UiComponentFactory $uiComponentFactory, OrderRepositoryInterface $orderRepository, SearchCriteriaBuilder $criteria, array $components = [], array $data = [])
    {
        $this->_orderRepository = $orderRepository;
        $this->_searchCriteria  = $criteria;
        parent::__construct($context, $uiComponentFactory, $components, $data);
    }

    public function prepareDataSource(array $dataSource)
    {
        if (isset($dataSource['data']['items'])) {
            foreach ($dataSource['data']['items'] as & $item) {

                $order  = $this->_orderRepository->get($item["entity_id"]);
                $status = $order->getData("export_status");

                switch ($status) {
                    case "0":
                        $export_status = "No";
                        break;
                    case "1";
                        $export_status = "Yes";
                        break;
                    default:
                        $export_status = "Failed";
                        break;

                }

                // $this->getData('name') returns the name of the column so in this case it would return export_status
                $item[$this->getData('name')] = $export_status;
            }
        }

        return $dataSource;
    }
}

এটি দুর্দান্ত কাজ করেছে। আমি এমন সমস্যার মুখোমুখি হচ্ছি যেখানে এই অনুকূলিতকরণের ফলে গ্রিডের পরে অর্ডার গ্রিডের সরঞ্জামদণ্ডটি রেন্ডার করা যায়। আপনি কি এই সমস্যাটি অনুভব করেছেন?
ইয়ান

@ ইয়ান আমি এই সমস্যা ছিল না। আপনি ম্যাজেন্টো 2 এর কোন সংস্করণ ব্যবহার করছেন?
আন্দ্রে ফেরাজ

2
সিই 2.1.1। আমি বিষয়টি নির্ধারণ করেছি। আমার মডিউলটি বর্ণমুখে ম্যাজেন্টো_সেলসের আগে এসেছিল। আমি ম্যাজেন্টো_সেলে নির্ভরতার সাথে <সিকোয়েন্স> যুক্ত করেছি, আমার মডিউলটিকে অক্ষম করে দিয়েছি এবং তারপরে এটি পুনরায় সক্ষম করেছি enabled এটি সমস্যার সমাধান করেছে।
ইয়ান

1
এটি কি রফতানির বিকল্পগুলির জন্যও কাজ করে? আমার ক্ষেত্রে রফতানি করা তথ্যের খালি মান ছিল।
ম্যাজপাইকো

1
filter_condition_callbackতেমনিভাবে ম্যাজেন্টো 1 এর যেখানে আপনি ক্ষেত্র অনুযায়ী নিজস্ব কাস্টম ফিল্টার যুক্ত করতে পারবেন। দয়া করে বলবেন না "আপনার অর্থ কী?" এইবার;)
ম্যাজপাইকো

33

আমার সমাধানটি আরও কার্যকর হতে পারে যেহেতু এটি গ্রিডে একটি কলাম যুক্ত করার স্থানীয় পদ্ধতি অনুসরণ করে এবং কলামের ডেটা পাওয়ার জন্য আপনাকে পৃষ্ঠায় প্রদর্শিত প্রতিটি আদেশ লোড করতে হবে না ( পরিবর্তে বিক্রয়_র্ডার_গ্রিড টেবিলটি ব্যবহার করে)। উপরেরটি কীভাবে কাস্টমাইজড রেন্ডারার তৈরি করবেন তার দুর্দান্ত উদাহরণ।

বিক্রেতা / [বিক্রেতা] / [প্যাকেজ] /view/adminhtml/ui_component/sales_order_grid.xml

<!-- Add the column "my_column" (My Column) to the sales order grid. -->
<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="my_column">
        <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">My Column</item>
            </item>
        </argument>
    </column>
</columns>

অনুগ্রহ করে নোট করুন যে কলামটি প্রদর্শিত হওয়ার আগে অবশ্যই ক্রমটির উপরে ড্রপ-ডাউন উইজেট ব্যবহার করে আপনাকে অবশ্যই সক্ষম করতে হবে।

বিক্রেতা / [বিক্রেতা] / [প্যাকেজ] /etc/di.xml

<!-- Sync the column "my_column" between the sales_order and sales_order_grid tables -->
<virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid" type="Magento\Sales\Model\ResourceModel\Grid">
    <arguments>
        <argument name="columns">
            <item name="my_column" xsi:type="string">sales_order.my_column</item>
        </argument>
    </arguments>
</virtualType>

বিক্রয়_ অর্ডার_গ্রিড টেবিলটিতে কলাম যুক্ত করতে সেটআপ কোডের নমুনা (এটি আপনার ইনস্টল / আপগ্রেড স্ক্রিপ্টে ব্যবহার করুন)। একই কোডটি ওয়েলস-অর্ডার টেবিলের জন্য উপায় হিসাবে কাজ করে।

$setup->getConnection()->addColumn(
        $setup->getTable('sales_order_grid'),
        'my_column',
        [
            'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            'length' => 255,
            'nullable' => true,
            'comment' => 'My Column'
        ]
    );

আশা করি এটা সাহায্য করবে! :-)


এই উত্তরের প্রয়োজন যে কলামটি বিক্রয়_অর্ডার_গ্রিড টেবিল, সঠিক?
তেরো লাহটিনেন

@ ম্যাগপার্টস, কখন এই স্ক্রিপ্টটি কাজ করবে?
সাগরপিপঞ্চল

1
আমার জন্য কাজ করেছেন, ধন্যবাদ: 3 বিটিডাব্লু, এতে sales_order_grid.xmlআপনার নিজের <লিস্টিং> </
translation

<আর্গুমেন্ট নাম = "কলামগুলি"> <আর্গুমেন্ট নাম = "কলাম" এক্সসি: টাইপ = "অ্যারে"> ডিআই: এক্সএমএল ফাইলে প্রতিস্থাপন করা উচিত। অন্যথায় এটি নিম্নলিখিত ত্রুটিটি ফিরিয়ে দেবে। অবৈধ দস্তাবেজ উপাদান 'যুক্তি': প্রকারের সংজ্ঞাটি বিমূর্ত।
সাইদ

1

অর্ডার গ্রিডে একটি নতুন কলাম তৈরি করার জন্য, আমি ম্যাজেন্টো ডিফল্ট মডিউল বিক্রেতা / ম্যাজেন্টো / মডিউল-গ্রাহক-ব্যালেন্স উল্লেখ করেছি

আমার ক্ষেত্রে, 'কাস্টম_কলাম' কলামটি বিক্রয়_র্ডার সারণীতে ইতিমধ্যে বিদ্যমান।

আমাকে গ্রিডে 'কাস্টম_কলাম' কলামটি প্রদর্শন করতে হবে

পদক্ষেপ 1: বিক্রয়_র্ডার_গ্রিড টেবিলটিতে একটি নতুন কলাম যুক্ত করুন

        $connection = $installer->getConnection();
        if ($connection->isTableExists('sales_order_grid')) {
            $connection->addColumn(
                $connection->getTableName('sales_order_grid'),
                'custom_column',
                [
                    "type"      =>  Table::TYPE_TEXT,
                    'default'   =>  null,
                    "comment"   =>  'Custom Column'
                ]
            );
    }

পদক্ষেপ 2: অ্যাপ্লিকেশন কোডের মধ্যে di.xML ফাইল [বিক্রেতার] [নাম স্পেস] \ ইত্যাদি \ di.xML

 <!-- Adding Columns in sales_order_grid-->
    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid">
        <arguments>
            <argument name="columns" xsi:type="array">
                <item name="custom_column" xsi:type="string">sales_order.custom_column</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="Magento\SalesArchive\Model\ResourceModel\Order\Grid">
        <arguments>
            <argument name="columns" xsi:type="array">
                <item name="custom_column" xsi:type="string">sales_order.custom_column</item>
            </argument>
        </arguments>
    </virtualType>

পদক্ষেপ 3: অ্যাপ্লিকেশন কোডের আওতায় বিক্রয়_অর্ডার_গ্রিড.এক্সএমএল লেআউট ফাইল তৈরি করুন [বিক্রেতা] [নেমস্পেস] \ ভিউ \ অ্যাডমিনটিচটিএমএল \ ui_comp घटक

<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="custom_column">
            <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">Custom Column</item>
                </item>
            </argument>
        </column>
    </columns>
</listing>

দ্রষ্টব্য: এটি ম্যাজেন্টো সংস্করণ ২.২..6 এ পরীক্ষা করা হয়েছে


0

ডেমো / ExtendedGrid / দৃশ্য / adminhtml / ui_component / sales_order_grid.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<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="new_column_name" class="Demo\ExtendedGrid\Ui\Component\Listing\Column\NewColumnStatus">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sortable" xsi:type="boolean">false</item>
                    <item name="has_preview" xsi:type="string">1</item>
                    <item name="label" xsi:type="string" translate="true">New Column Name</item>
              </item>
            </argument>
        </column>
    </columns>
</listing>

তারপরে এটি রেন্ডার জন্য ইউআই ক্লাস তৈরি করেছে।

ডেমো / ExtendedGrid / UI 'তে / কম্পোনেন্ট / তালিকা / কলাম / NewColumnStatus.php

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Demo\ExtendedGrid\Ui\Component\Listing\Column;

/**
 * Class  NewColumnStatus
 */
class NewColumnStatus extends \Magento\Ui\Component\Listing\Columns\Column
{

    /**
     * @var string[]
     */
    protected $statuses;

   /**
     * Constructor
     *
     * @param ContextInterface $context
     * @param UiComponentFactory $uiComponentFactory
     * @param CollectionFactory $collectionFactory
     * @param array $components
     * @param array $data
     */
       public function __construct(
        \Magento\Framework\View\Element\UiComponent\ContextInterface $context,
        \Magento\Framework\View\Element\UiComponentFactory $uiComponentFactory,
        \Magento\Framework\UrlInterface $urlBuilder,
        array $components = [],
        array $data = []
    ) {
        $this->urlBuilder = $urlBuilder;
         parent::__construct($context, $uiComponentFactory, $components, $data);
    }


    /**
     * Prepare Data Source
     *
     * @param array $dataSource
     * @return void
     */
    public function prepareDataSource(array $dataSource)
    {
        if (isset($dataSource['data']['items'])) {
            foreach ($dataSource['data']['items'] as &$item) {

           //put  the logic here


            }
        }

        return $dataSource;
   }
}

ক্যাশে সাফ করতে ভুলবেন না।


-1

আমি কাস্টম মডিউল তৈরি করেছি যা বিক্রয় আদেশ সত্তায় কাস্টম বৈশিষ্ট্য যুক্ত করবে এবং তারপরে অ্যাডমিন বিক্রয় বিক্রয় গ্রিডে প্রদর্শিত হবে।

মডিউলটি সংজ্ঞায়িত করতে মডিউল.এক্সএমএল ফাইল। অ্যাপ্লিকেশন \ কোড \ কোম্পানি \ মডিউল \ ইত্যাদি \ module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="COMPANY_MODULE" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Sales"/>
            <module name="Magento_Quote"/>
            <module name="Magento_Checkout"/>
        </sequence>
    </module>
</config>

অ্যাপ্লিকেশনে di.xML ফাইল \ কোড \ সংস্থা \ মডেল \ ইত্যাদি \ 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="export_status" xsi:type="string">sales_order.export_status</item>
            </argument>
        </arguments>
    </virtualType>
</config>

ডাটাবেস টেবিলের কাস্টম অ্যাট্রিবিউট এক্সপোর্ট_স্ট্যাটাস যুক্ত করতে ইনস্টলডেটা.এফপি

অ্যাপ্লিকেশন \ কোড \ কোম্পানি \ মডিউল \ সেটআপ \ InstallData.php

<?php

namespace COMPANY\MODULE\Setup;

use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

/**
 * @codeCoverageIgnore
 */
class InstallData implements InstallDataInterface
{
    /**
     * EAV setup factory
     *
     * @var EavSetupFactory
     */
    private $eavSetupFactory;

    /**
     * Init
     *
     * @param EavSetupFactory $eavSetupFactory
     */
    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

    /**
     * {@inheritdoc}
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        /** @var EavSetup $eavSetup */
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        if (version_compare($context->getVersion(), '1.0.0') < 0){      
            $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
            $salesSetup = $objectManager->create('Magento\Sales\Setup\SalesSetup');
            $salesSetup->addAttribute('order', 'export_status', ['type' =>'varchar']);
            $quoteSetup = $objectManager->create('Magento\Quote\Setup\QuoteSetup'); 
        }
    }
}

বিক্রয় অর্ডার অ্যাডমিন গ্রিডে কাস্টম কলাম যুক্ত করতে বিক্রয়_ অর্ডার_গ্রিড.এক্সএমএল।

<?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="export_status">
            <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">XML Exported</item>
                </item>
            </argument>
        </column>
    </columns>
</listing>

আপনি নীচের লিঙ্কটি ক্লিক করে পূর্ণ মডিউল বিনামূল্যে ডাউনলোড করতে পারেন http://vdcstaging.co.in/download/add-custom-culumn-to-admin-grid.zip

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.