Entfernen Sie die Spalte basierend auf der Bedingung aus dem Auftragsraster

7

Ich möchte die statusSpalte aus dem Bestellraster des Magento Admin-Panels entfernen .

Ich verwende den folgenden Code, um die statusSpalte in meiner sales_order_grid.xmlDatei zu entfernen . Referenz

<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="status">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="componentDisabled" xsi:type="boolean">true</item>
                </item>
            </argument>
        </column>
    </columns>
</listing>

Die statusSpalte wird erfolgreich entfernt, aber ich möchte sie basierend auf einer Bedingung und dem Wert eines Konfigurationsfelds aus dem Stores > ConfigurationAbschnitt entfernen .

Gibt es eine Möglichkeit, eine Bedingung hinzuzufügen componentDisabled, oder eine andere Möglichkeit, meine Anforderungen zu erfüllen?

Jaimin Sutariya
quelle

Antworten:

6

Es könnte hilfreich für Sie sein.

<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="websites" class="Magento\Catalog\Ui\Component\Listing\Columns\Websites" sortOrder="100">
            <settings>
                <addField>true</addField>
                <options class="Magento\Store\Model\ResourceModel\Website\Collection"/>
                <dataType>text</dataType>
                <label translate="true">Websites</label>
            </settings>
        </column>
    </columns>
</listing>

Websites.php

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

use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Store\Model\StoreManagerInterface;

/**
 * @api
 * @since 100.0.2
 */
class Websites extends \Magento\Ui\Component\Listing\Columns\Column
{
    /**
     * Column name
     */
    const NAME = 'websites';

    /**
     * Store manager
     *
     * @var StoreManagerInterface
     */
    protected $storeManager;

    /**
     * @param ContextInterface $context
     * @param UiComponentFactory $uiComponentFactory
     * @param StoreManagerInterface $storeManager
     * @param array $components
     * @param array $data
     */
    public function __construct(
        ContextInterface $context,
        UiComponentFactory $uiComponentFactory,
        StoreManagerInterface $storeManager,
        array $components = [],
        array $data = []
    ) {
        parent::__construct($context, $uiComponentFactory, $components, $data);
        $this->storeManager = $storeManager;
    }

    /**
     * {@inheritdoc}
     * @deprecated 101.0.0
     */
    public function prepareDataSource(array $dataSource)
    {
        $websiteNames = [];
        foreach ($this->getData('options') as $website) {
            $websiteNames[$website->getWebsiteId()] = $website->getName();
        }
        if (isset($dataSource['data']['items'])) {
            $fieldName = $this->getData('name');
            foreach ($dataSource['data']['items'] as & $item) {
                $websites = [];
                foreach ($item[$fieldName] as $websiteId) {
                    if (!isset($websiteNames[$websiteId])) {
                        continue;
                    }
                    $websites[] = $websiteNames[$websiteId];
                }
                $item[$fieldName] = implode(', ', $websites);
            }
        }

        return $dataSource;
    }

    /**
     * Prepare component configuration
     * @return void
     */
    public function prepare()
    {
        parent::prepare();
        if ($this->storeManager->isSingleStoreMode()) {
            $this->_data['config']['componentDisabled'] = true;
        }
    }
}

Es ist definitiv Magento, das verwendet wird, um die Website basierend auf dem Zustand anzuzeigen.

Dharmendra Jadav
quelle
Danke Dharmendra für die Antwort. Ich werde versuchen, es mit meinem Code zu implementieren.
Jaimin Sutariya
Willkommen Bruder jederzeit.
Dharmendra Jadav
@DharmendraJadav Können wir Spaltenbasen für den in USER angemeldeten Administrator ausblenden? Ich möchte eine Spalte mithilfe der UI-Komponente aus dem Admin-Raster ausblenden.
Möchten Sie
@ Kartik wir müssen das überprüfen. weil ich das noch nicht überprüft habe. Aber ja, das können wir. Nicht unmöglich
Dharmendra Jadav
@DharmendraJadav kannst du bitte hier posten, damit ich auch anderen helfen kann. Ihre Bemühungen werden geschätzt.
Kartik Asodariya