Question

I need to add a new dropdown field in the "CART PRICE RULE" form in Backend:

MARKETING > PROMOTIONS > CART PRICE RULES > ADD NEW RULE

Was it helpful?

Solution

Create file in your custom module app/code/Vendor/Module/view/adminhtml/ui_component/sales_rule_form.xml

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="rule_information" sortOrder="10">
        <field name="store_ids">
            <argument name="data" xsi:type="array">
                <item name="options" xsi:type="object">Magento\Cms\Ui\Component\Listing\Column\Cms\Options</item>
                <item name="config" xsi:type="array">
                    <item name="dataType" xsi:type="string">int</item>
                    <item name="label" xsi:type="string" translate="true">Store View Test</item>
                    <item name="formElement" xsi:type="string">multiselect</item>
                    <item name="source" xsi:type="string">sales_rule</item>
                    <item name="dataScope" xsi:type="string">store_ids</item>
                    <item name="default" xsi:type="string">0</item>
                    <item name="validation" xsi:type="array">
                        <item name="required-entry" xsi:type="boolean">true</item>
                    </item>
                </item>
            </argument>
        </field>
    </fieldset>
</form>

And you can see changes (the Store View Test column):

Example

Change it to the desired one. But keep in mind, that this field just rendered in the layout, but to do save and load your custom data you should write a custom plugin code which can do this during the model load and save process.

OTHER TIPS

To anyone who needs a complete answer to this question. first, create an installSchema or UpgradeSchema script in your custom module:

class UpgradeSchema implements UpgradeSchemaInterface
{

    /**
     * Upgrades DB schema for a module
     *
     * @param SchemaSetupInterface $setup
     * @param ModuleContextInterface $context
     * @return void
     */
    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
       $installer = $setup;
       $installer->startSetup();
        if (version_compare($context->getVersion(), '1.0.3', '<')) {

            $installer->getConnection()->addColumn(
                $installer->getTable('salesrule'),
                'custom_field',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
                    'length' => 1,
                    'unsigned' => true,
                    'nullable' => true,
                    'default' => '0',
                    'comment' => 'custom_field'
                ]
            );
        }
       $installer->endSetup();
    }

second, create the file

view/adminhtml/ui_component/sales_rule_form.xml

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="rule_information" sortOrder="10">
        <field name="custom_field" formElement="select">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="source" xsi:type="string">custom_field</item>
                </item>
            </argument>
            <settings>
                <dataType>number</dataType>
                <label translate="true">custom field</label>
                <visible>true</visible>
                <dataScope>custom_field</dataScope>
            </settings>
            <formElements>
                <select>
                    <settings>
                        <options>
                            <option name="0" xsi:type="array">
                                <item name="value" xsi:type="number">1</item>
                                <item name="label" xsi:type="string" translate="true">Yes</item>
                            </option>
                            <option name="1" xsi:type="array">
                                <item name="value" xsi:type="number">0</item>
                                <item name="label" xsi:type="string" translate="true">No</item>
                            </option>
                        </options>
                    </settings>
                </select>
            </formElements>
        </field>
    </fieldset>
</form>

and that's it you're done

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top