Magento 2.2.6: Добавьте настраиваемое поле в форму добавления атрибута продукта - Не отображает значение базы данных при редактировании


Я добавил настраиваемое поле в атрибуты своего продукта, и оно отображается и сохраняется нормально, но когда я перезагружаю форму атрибута, значение моего настраиваемого поля пустое. Если я введу данные формы внутри _prepareForm в Front.php , Я вижу значение своего настраиваемого поля, которое сейчас равно 5

enter image description here

Я создаю свой плагин с помощью этого кода:

/app/code/Vendor/CustomModule/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">
    <type name="Magento\Catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Front">
        <plugin name="vendor_custommodule_attribute_edit_form" type="Vendor\CustomModule\Plugin\Block\Adminhtml\Product\Attribute\Edit\Tab\Front" sortOrder="1"/>
    </type>
</config>

/app/code/Vendor/CustomModule/Plugin/Block/Adminhtml/Product/Attribute/Edit/Tab/Front.php

namespace Vendor\CustomModule\Plugin\Block\Adminhtml\Product\Attribute\Edit\Tab;

class Front
{

    /**
     * Get form HTML
     *
     * @return string
     */
    public function aroundGetFormHtml(
        \Magento\Catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Front $subject,
        \Closure $proceed
    )
    {

        $form = $subject->getForm();
        if (is_object($form)) {
            $fieldset = $form->addFieldset(
                'custom_fieldset',
                ['legend' => __('Custom options')]
            );

            $fieldset->addField(
                'my_custom_field',
                'text',
                [   
                    'name'      => 'my_custom_field',
                    'label'     => __('My custom field'),
                    'title'     => __('My custom field'),
                ]
            );
        }
        return $proceed();
    }
}

/app/code/Vendor/CustomModule/view/adminhtml/ui_component/product_attribute_add_form.xml

<?xml version="1.0"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="custom_fieldset">
        <field name="my_custom_field">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">130</item>
                    <item name="dataType" xsi:type="string">string</item>
                    <item name="formElement" xsi:type="string">input</item>
                    <item name="label" xsi:type="string" translate="true">My custom field</item>
                    <item name="default" xsi:type="number">0</item>
                </item>
            </argument>
        </field>
    </fieldset>    
</form>

Результат таков:

enter image description here

Но в базе данных у меня есть правильное значение, которое в настоящее время равно 5

Кто-нибудь может мне помочь, пожалуйста?

Author: Saul, 2018-10-26

2 answers

protected $_coreRegistry;


public function __construct(
    \Magento\Framework\Registry $registry
) {
    $this->_coreRegistry = $registry;
}

/**
 * Get form HTML
 *
 * @return string
 */
public function aroundGetFormHtml(
    \Magento\Catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Front $subject,
    \Closure $proceed
)
{
    $attributeObject = $this->_coreRegistry->registry('entity_attribute');
    $yesnoSource = $this->_yesNo->toOptionArray();
    $form = $subject->getForm();
    if (is_object($form)) {
        $fieldset = $form->addFieldset(
            'custom_fieldset',
            ['legend' => __('Custom options')]
        );

        $fieldset->addField(
            'my_custom_field',
            'text',
            [   
                'name'      => 'my_custom_field',
                'label'     => __('My custom field'),
                'title'     => __('My custom field'),
            ]
        );
    }
    $form->setValues($attributeObject->getData());
    return $proceed();
}

Вы забыли задать значения для формы Попробуйте эти коды и запустите снова

 0
Author: Quang Huy, 2018-11-23 04:04:41

Просто обновление предыдущего ответа. Реестр устарел, и теперь вы можете использовать:

$attributeObject = $subject->getAttributeObject();

И вместо использования $form->setValues($attributeobject->getData()); Лучше использовать следующий код, чтобы предотвратить пустоту метки атрибута при редактировании администратором. Это было протестировано в magento 2.3.1

$form->addValues(['my_custom_field' => $attributeObject->getData('my_custom_field')]);

Общий файл становится:

 /**
     * Get form HTML
     *
     * @return string
     */
    public function aroundGetFormHtml(
        \Magento\Catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Front $subject,
        \Closure $proceed
    )
    {
        $attributeObject = $subject->getAttributeObject();
        $form = $subject->getForm();
        if (is_object($form)) {
            $fieldset = $form->addFieldset(
            'custom_fieldset',
            ['legend' => __('Custom options')]
        );

        $fieldset->addField(
            'my_custom_field',
            'text',
            [   
                'name'      => 'my_custom_field',
                'label'     => __('My custom field'),
                'title'     => __('My custom field'),
            ]
        );
        }
        $form->addValues(['my_custom_field' => $attributeObject->getData('my_custom_field')]);
        return $proceed();
    }
 0
Author: epic_legends epic, 2020-02-07 10:55:41