ฉันจะเพิ่มฟิลด์กำหนดเองลงในฟอร์มผู้ดูแลระบบใน Magento 2 ได้อย่างไร


9

ฉันได้สร้างแบบฟอร์มในผู้ดูแลระบบโดยใช้องค์ประกอบ UI ดังนั้นใน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>

ตอนนี้ฉันไม่ต้องการให้ค่านี้เป็น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

คุณสามารถตรวจสอบโมดูลตัวอย่างวีโอไอพีที่มีให้

<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
Giel Berkers

จะเพิ่มฟิลด์ที่กำหนดเองในฟอร์มแก้ไขผลิตภัณฑ์ในผู้ดูแลระบบได้อย่างไร
jafar pinjar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.