Установите пользовательское количество по умолчанию при создании нового продукта Magento 2.3


Мне нужно, чтобы поле количества заполнялось пользовательским значением при создании нового продукта в admin. Я уже пробовал модификаторы (не понял, как установить данные для нового продукта с помощью modifyData($data) и этот ответ, похоже, больше не работает.. Есть ли какой-нибудь способ сделать это?

Создание наблюдателя на событии catalog_product_new_action и $observer->getEvent()->getProduct()->setQty(%number%) также не работает.

Ваше здоровье.

Author: Kishan Savaliya, 2019-11-21

1 answers

Для этого вы можете создать свой собственный пул модификаторов в своем пользовательском расширении. Следующие файлы выполнят эту работу.

Etc/adminhtml/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\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool">
        <arguments>
            <argument name="modifiers" xsi:type="array">
                <item name="defaultQtyModifier" xsi:type="array">
                    <item name="class" xsi:type="string">Vendor\Module\Ui\DataProvider\Product\Form\Modifier\DefaultQtyModifier</item>
                    <item name="sortOrder" xsi:type="number">200</item>
                </item>
            </argument>
        </arguments>
    </virtualType>
</config>

Ui/DataProvider/Product/Form/Modifier/DefaultQtyModifier.php

<?php

namespace Vendor\Module\Ui\DataProvider\Product\Form\Modifier;

use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AbstractModifier;
use Magento\Catalog\Model\Locator\LocatorInterface;

class DefaultQtyModifier extends AbstractModifier
{
    public function __construct(
        LocatorInterface $locator
    ) {
        $this->locator = $locator;
    }

    public function modifyData(array $data)
    {
        $model = $this->locator->getProduct();
        $modelId = $model->getId();

        if (!isset($data[$modelId][self::DATA_SOURCE_DEFAULT]['quantity_and_stock_status']['qty'])) {
            $data[$modelId][self::DATA_SOURCE_DEFAULT]['quantity_and_stock_status']['qty'] = 12;
        }

        return $data;
    }

    public function modifyMeta(array $meta)
    {
        return $meta;
    }
}

Здесь, вместо 12, вы можете определить свой собственный номер кол-во.

Замените Поставщика и модуль вашим исходным именем поставщика и модуля.

Надеюсь, это поможет.

 0
Author: Yash Shah, 2019-11-21 17:48:06