Magento – Magento2 : How to add Custom button in product edit form

magento2

I have created one custom module and through that module, I want to add a custom button in Admin product edit form.

I have created a plugin using the below reference
How to Add a Custom Button to Admin Sales Order View in Magento2

di.xml

    <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\Edit">
            <plugin name="Company_Module::pluginBeforeView" type="Company\Module\Plugin\PluginBeforeView" />
        </type>
    </config>

PluginBeforeView.php

namespace Company\Module\Plugin;

class PluginBeforeView
    {

        public function beforeGetOrderId(\Magento\Catalog\Block\Adminhtml\Product\Edit $subject){
            $subject->addButton(
                    'mybutton',
                    ['label' => __('My Buttion'), 'onclick' => 'setLocation(window.location.href)', 'class' => 'reset'],
                    -1
                );

            return null;
        }

    }

But it did not work. Any idea how to solve this.

Best Answer

The product form is generated via ui-components.
The ui component name for product form is view/adminhtml/ui_component/product_form.xml.

You need to create a file with the same name and path in your own module with the following content:

<?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">
    <argument name="data" xsi:type="array">
        <item name="buttons" xsi:type="array">
            <item name="button-unique-identifier-here" xsi:type="string">[Namespace]\[Module]\Block\Adminhtml\Product\Edit\Button\CustomButton</item>
        </item>
    </argument>
</form>

Then create the class [Namespace]\[Module]\Block\Adminhtml\Product\Edit\Button\CustomButton in the file [Namespace]/[Module]/Block/Adminhtml/Product/Edit/Button/CustomButton.php

<?php 
namespace [Namespace]\[Module]\Block\Adminhtml\Product\Edit\Button;

use Magento\Catalog\Block\Adminhtml\Product\Edit\Button\Generic;

class CustomButton extends Generic
{
    public function getButtonData()
    {
        return [
            'label' => __('Your button label here'),
            'on_click' => "alert('it works')",
            'sort_order' => 100
        ];
    }
}

Your ui component file should be merged with the main file and your buttons should appear among the other buttons.