Настраиваемое поле в форме редактирования продукта в администраторе magento2


Я пытаюсь добавить пользовательское текстовое поле в форму редактирования продукта в панели администратора.

Я использовал приведенный ниже код в etc/adminhtml/di.xml

   <virtualType 
   name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool">
    <arguments>
        <argument name="modifiers" xsi:type="array">
            <item name="customTab" xsi:type="array">
                <item name="class" xsi:type="string">
                    Vendor\Module\Ui\DataProvider\Product\Form\Modifier\NewField
                </item>
                <item name="sortOrder" xsi:type="number">70</item>
            </item>
        </argument>
    </arguments>
</virtualType>

И используется ниже кода в Newfield.php

 <?php
 namespace Vendor\Module\Ui\DataProvider\Product\Form\Modifier;
 use Magento\Catalog\Model\Locator\LocatorInterface;
 use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AbstractModifier;
 use Magento\Ui\Component\Form\Fieldset;
 use Magento\Ui\Component\Form\Field;
 use Magento\Ui\Component\Form\Element\Select;
 use Magento\Ui\Component\Form\Element\DataType\Text;
 class NewField extends AbstractModifier
{
private $locator;
protected $_coreRegistry;
protected $_resource;
private $stockRegistry;
public function __construct(
    LocatorInterface $locator,
    \Magento\Framework\Registry  $coreRegistry,
    \Magento\Framework\App\ResourceConnection $resource,
    \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
) {
    $this->locator = $locator;
    $this->_coreRegistry = $coreRegistry;
    $this->_resource = $resource;
    $this->stockRegistry = $stockRegistry;
}
public function modifyData(array $data)
{
    return $data;
}

public function modifyMeta(array $meta)
{
        $meta = array_replace_recursive(
            $meta,
            [
                'custom_fieldset' => [
                    'arguments' => [
                        'data' => [
                            'config' => [
                                'label' => __('Actual Quantity'),
                                'componentType' => Fieldset::NAME,
                                'dataScope' => 'data.product.custom_fieldset',
                                'collapsible' => false,
                                'sortOrder' => 5,
                            ],
                        ],
                    ],
                    'children' => [
                    'custom_field' => $this->getCustomField()
                    ],
                ]
            ]
        );
        return $meta;
    }

public function getCustomField()
{
    return [
        'arguments' => [
            'data' => [
                'config' => [
                    'label' => __('Actual Qty'),
                    'componentType' => Field::NAME,
                    'formElement' => \Magento\Ui\Component\Form\Element\Input::NAME,
                    'dataScope' => 'enabled',
                    'dataType' => Text::NAME,
                    'sortOrder' => 10,
                    'value' => $this->getProductData(),
                ],
            ],
        ],
    ];
}

public function getConnection()
{
    $connection = $this->_resource->getConnection(\Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION);
    return $connection;
}
public function getProductData()
{
    $product = $this->_coreRegistry->registry('product');
    $productId = $product->getId();
    $connection = $this->getConnection();
    $sql = "select SUM(a.qty) as qty from quote_item as a join quote as b ON a.quote_id = b.entity_id 
                    where b.reserved_order_id is NULL and b.is_active = '1' and a.product_id = '".$productId."'";
    $resultSets = $connection->fetchAll($sql);
    if(isset($resultSets[0]['qty'])){
        $actualQty = $resultSets[0]['qty'];
        return $actualQty;
    }else{
        $productStock = $this->stockRegistry->getStockItem($productId);
        $productQty = $productStock->getQty();
        return $productQty;
       }

    }

 }

Текстовое поле создается в форме редактирования продукта, но я ищу код, как переместить его после поля Кол-во. Теперь он был создан с отдельным набором полей.

Можно ли перейти к после поля кол-во? Или есть ли какие-либо другие способы сделать это? Пожалуйста, кто-нибудь, помогите мне с этим. Спасибо

Author: Hitesh, 2018-11-08

1 answers

Вы можете установить значение по умолчанию из приведенного ниже кода. Обновите функцию modifyMeta таким образом.

public function __construct(
    \Magento\Framework\Stdlib\ArrayManager $arrayManager
) {
    $this->arrayManager = $arrayManager;
}

public function modifyMeta(array $meta)
{
    $fieldCode = 'custom_fieldset';
    $elementPath = $this->arrayManager->findPath($fieldCode, $meta, null, 'children');
    $containerPath = $this->arrayManager->findPath(static::CONTAINER_PREFIX . $fieldCode, $meta, null, 'children');
    if (!$elementPath) {
        return $meta;
    }

    $meta = $this->arrayManager->merge(
        $containerPath,
        $meta,
        [
            'children'  => [
                $fieldCode => [
                    'arguments' => [
                        'data' => [
                            'config' => [
                                'required'  => false,
                                'default'  => $this->getProductData()
                            ],
                        ],
                    ],
                ]
            ]
        ]
    );
 return $meta;
}

Дайте мне знать, если при этом у вас возникнут какие-либо проблемы.

 3
Author: Ramkishan Suthar, 2018-11-09 08:47:52