আমি কাস্টম কলাম যুক্ত করেছেন 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
উভয় টেবিলে একই কলাম / ক্ষেত্রটি পাব বলে এটি ডিফল্ট ফিল্টারে অখণ্ডতা লঙ্ঘনের ত্রুটি তৈরি করে ।
সুতরাং সমস্যাটি কীভাবে ডিফল্ট কলামকে প্রভাবিত না করে কাস্টম কলামে ফিল্টার প্রয়োগ করতে হয়?
কোন সাহায্য প্রশংসা করা হবে।