Magento 2 ফিল্টার কাজ করছে না যখন কাস্টম কলাম ক্রেডিট গ্রিডে ইউআই উপাদান ব্যবহার করে যুক্ত হয়েছে


9

আমি কাস্টম কলাম যুক্ত করেছেন track_numberমধ্যে বিক্রয় >> অর্ডার ব্যাক-এন্ড এ গ্রিড।

<vendor_name>/Sales/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="track_number" class="<vendor_name>\Sales\Ui\Component\Listing\Column\OrderGrid">
            <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="filter" xsi:type="string">text</item>
                    <item name="label" xsi:type="string" translate="true">Tracking #</item>
                </item>
            </argument>
        </column>
    </columns>
</listing>

সৃষ্টি <vendor_name>\Sales\Ui\Component\Listing\Column\OrderGrid

<?php
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace <vendor_name>\Sales\Ui\Component\Listing\Column;

use Magento\Ui\Component\Listing\Columns\Column;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
use Magento\Framework\Escaper;

/**
 * Cart crosssell list
 *
 * @author      Magento Core Team <core@magentocommerce.com>
 */
class OrderGrid extends Column
{
    /** @var \Magento\Sales\Api\Data\OrderInterface $order **/
    protected $_orderCollectionFactory;

    protected $_objectManager;

    /**
     * @var Escaper
     */
    protected $escaper;

    public function __construct(
        ContextInterface $context,
        UiComponentFactory $uiComponentFactory,
        Escaper $escaper,
        CollectionFactory $orderCollection,
        \Magento\Framework\ObjectManagerInterface $objectManager,
        array $components = [],
        array $data = []
    ) {
        $this->_orderCollectionFactory = $orderCollection;
        $this->_objectManager = $objectManager;
        $this->escaper = $escaper;

        parent::__construct($context, $uiComponentFactory, $components, $data);
    }

    public function getOrderTracking($id)
    {
        $order = $this->_objectManager->create('\Magento\Sales\Model\Order')->loadByIncrementId($id);
        $trackNumber = "";
        foreach ($order->getTracksCollection() as $_track) {
           $trackNumber = $_track->getNumber();
        }

        return $trackNumber;
    }

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

            foreach ($dataSource['data']['items'] as &$item) {
                $trackNumber = $this->getOrderTracking($item['increment_id']);
                $item[$this->getData('name')] = $this->escaper->escapeHtml($trackNumber);
            }
        }

        return $dataSource;
    }

}

উপরের কোডটি ট্র্যাকের তথ্য পুনরুদ্ধার করতে এবং কলামকে অর্ডার গ্রিডে যুক্ত করতে সহায়তা করে তবে এই কাস্টম কলামে বাছাই বা ফিল্টার করার জন্য আমাকে গ্রিড সংগ্রহ মডেলটিকে ওভাররাইড করতে হবে \Magento\Sales\Model\ResourceModel\Order\Grid\Collection.php

<?php
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace <vendor_name>\Sales\Model\ResourceModel\Order\Grid;

use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy;
use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory;
use Magento\Framework\Event\ManagerInterface as EventManager;
use Psr\Log\LoggerInterface as Logger;

/**
 * Order grid collection
 */
class Collection extends \Magento\Sales\Model\ResourceModel\Order\Grid\Collection
{
    protected function _renderFiltersBefore() 
    {
        $joinTable = $this->getTable('sales_shipment_track');

        $this->getSelect()->JoinInner($joinTable.' as ordertable','main_table.entity_id = ordertable.order_id', array('track_number', 'tacking_created_at'=> 'ordertable.created_at'));

        parent::_renderFiltersBefore();
   }
}

সব ঠিকঠাক হয় তবে এই সংগ্রহটি sales_shipment_trackটেবিলের সাথে যোগ দেওয়ার কারণে এটি আমাদের একই ক্ষেত্রের মতো created_atবা statusউভয় টেবিলে একই কলাম / ক্ষেত্রটি পাব বলে এটি ডিফল্ট ফিল্টারে অখণ্ডতা লঙ্ঘনের ত্রুটি তৈরি করে ।

সুতরাং সমস্যাটি কীভাবে ডিফল্ট কলামকে প্রভাবিত না করে কাস্টম কলামে ফিল্টার প্রয়োগ করতে হয়?

কোন সাহায্য প্রশংসা করা হবে।

উত্তর:


8

আমার একই সমস্যা আছে এবং $this->addFilterToMap()আমার সমস্যাটি ঠিক করুন ..

এই উত্তরটি পরীক্ষা করুন ম্যাজেন্টো 2 গ্রিড uiComp घटक: একটি কলাম ফিল্টারে একটি টেবিলের ওরফে অন্তর্ভুক্ত করুন


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