Настраиваемое поле в форме редактирования продукта в администраторе 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;
}
}
}
Текстовое поле создается в форме редактирования продукта, но я ищу код, как переместить его после поля Кол-во. Теперь он был создан с отдельным набором полей.
Можно ли перейти к после поля кол-во? Или есть ли какие-либо другие способы сделать это? Пожалуйста, кто-нибудь, помогите мне с этим. Спасибо
1
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