Як я можу додати спеціальне поле до форми адміністратора в Magento 2?


9

Я створив форму в адміністраторі за допомогою компонентів інтерфейсу, тож у view/adminhtml/ui_component/[module]_[entity]_form.xmlмене є таке:

<field name="configuration">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="dataType" xsi:type="string">text</item>
            <item name="label" xsi:type="string" translate="true">Configuration</item>
            <item name="formElement" xsi:type="string">textarea</item>
            <item name="source" xsi:type="string">form</item>
            <item name="sortOrder" xsi:type="number">30</item>
            <item name="dataScope" xsi:type="string">configuration</item>
            <item name="validation" xsi:type="array">
                <item name="required-entry" xsi:type="boolean">true</item>
            </item>
        </item>
    </argument>
</field>

Тепер я не хочу, щоб це значення було a textarea, але я хочу створити свою власну магію HTML в бекенде для цього значення. Цей 'HTML Magic' з часом буде багато JS / KnockOut, який під водою все ж надсилає деякі приховані дані під час публікації форми, тому він повинен бути частиною форми. Я спробував додати візуалізацію, додавши:

<item name="renderer" xsi:type="object">Vendor\Module\Block\Adminhtml\Renderer\Configurator</item>

Але це все ще робить текстові області. Потім я спробував замінити formElementспеціальний клас таким чином:

<item name="formElement" xsi:type="object">Vendor\Module\Component\Form\Element\Configurator</item>

Але тоді я отримую помилку:

The requested component ("Vendor\Module\Component\Form\Element\Configurator") is not found. Before using, you must add the implementation.

Тож 2 питання тут:

  1. Це правильний спосіб додати спеціальний елемент форми до форми адміністратора? (і якщо так: як?)
  2. Незалежно від чого: як я можу додати реалізацію? Я перекопую UI-модуль, щоб побачити, як вони це зробили, але нічого не можу знайти.

Відповіді:


10

Ви можете перевірити модуль зразка magento, який вони надали

<field name="color">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <!--component constructor-->
            <item name="component" xsi:type="string">Magento_SampleForm/js/form/element/color-select</item>
            <!--main template for form field that renders elementTmpl as a child template-->
            <item name="template" xsi:type="string">ui/form/field</item>
            <!--customized form element template that will show colors-->
            <item name="elementTmpl" xsi:type="string">Magento_SampleForm/form/element/color-select</item>
            <item name="label" xsi:type="string">Autumn colors</item>
            <item name="visible" xsi:type="boolean">true</item>
            <item name="dataType" xsi:type="string">text</item>
            <item name="formElement" xsi:type="string">input</item>
            <item name="source" xsi:type="string">sampleform</item>
        </item>
    </argument>
</field>

Дякую! саме відповідь, яку я шукав! Я вже шукав, \Magento\Framework\View\Element\UiComponent\Config\Provider\Component\Definition::setComponentData()щоб додати спеціальний компонент за допомогою події, але це набагато, набагато зручніше! Мені справді слід детальніше розглянути ті приклади Magento 2.
Giel Berkers

3

Я не впевнений, але, думаю shopping cart price rule, дасть вам підказку щодо цього, ось приклад

<field name="stop_rules_processing">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="dataType" xsi:type="string">boolean</item>
                    <item name="formElement" xsi:type="string">checkbox</item>
                    <item name="source" xsi:type="string">sales_rule</item>
                    <item name="prefer" xsi:type="string">toggle</item>
                    <item name="valueMap" xsi:type="array">
                        <item name="true" xsi:type="number">1</item>
                        <item name="false" xsi:type="number">0</item>
                    </item>
                    <item name="default" xsi:type="number">0</item>
                    <item name="label" xsi:type="string" translate="true">Discard subsequent rules</item>
                </item>
            </argument>
        </field>
        <container name="actions_apply_to" >
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">40</item>
                </item>
            </argument>
            <htmlContent name="html_content">
                <argument name="block" xsi:type="object">Magento\SalesRule\Block\Adminhtml\Promo\Quote\Edit\Tab\Actions</argument>
            </htmlContent>
        </container>

Більш детально ви можете відвідати цей файл

\vendor\magento\module-sales-rule\view\adminhtml\ui_component\sales_rule_form.xml


Дякую за пораду! Здається, це просто додає блок вмісту HTML. Але мені потрібно створити складний елемент форми, який має в ньому багато логіки KnockOut, завантаженої XHR.
Джіель Беркерс

як додати спеціальне поле до форми редагування продукту в адміністраторі?
jafar pinjar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.