Question

Hi i'm new at magento2 and i want to put a PHP function in an "on click" attribute of a button on ui component form.

Specifically on this "Save Header" button. button

So, actually i want to use this "Save Header" button to just save two fields of the form, the fields (Nome Header, Valor Header).

form

The "on click" attribute. In this "on click" i want to call a php function...

on click

routes.xml:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
<router id="admin">
    <route id="api" frontName="api">
        <module name="Hub_Api" />
    </route>
</router>

directories

------------------------------EDIT---------------------------------

So now my "SaveHeader" button is like that, but still don't working, maybe the url is passed wrong: new saveheader button

SaveHeader.php (Controller):

namespace Hub\Api\Controller\Adminhtml\Data;

class SaveHeader extends \Magento\Framework\App\Action\Action { protected $logger;

public function __construct(
    \Psr\Log\LoggerInterface $logger
) {
    $this->logger = $logger;
    parent::__construct();
}

/**
 * View  page action
 *
 * @return void
 */
public function execute()
{
    $txt = 'HUDSON SAVEHEADER : ';
    $this->logger->log('DEBUG', $txt);

}

}

Was it helpful?

Solution

try this

public function getButtonData()
{
    $message ='Are you sure you want to do this?';
    $url = $this->getUrl("api/data/deleteheader"); 
    return
        [
            'label' => __('Save Header'),
            'class' => 'myclass',
            'on_click' => 'confirmSetLocation('{$message}', '{$url}')',
            'sort_order' => 100
    ];
}

You can write you php code into this controller action file.

I Hope This Helps You.

OTHER TIPS

hello you can change your code with following code

$fieldset->addField('registered', 'button', array(
            'label' => Mage::helper('core')->__('Send e-mail to all registered customers'),
            'value' => Mage::helper('core')->__('Button Caption'),
            'name'  => 'registered',
            'class' => 'form-button',
            'onclick' => "setLocation('your url')",
        ));

This is my idea hope it help. In getButtonData() function add on_click to javascript function something like 'saveHeader()'

add your template in layout call to UI form: sample we have MODULE-NAME_CONTROLLER-NAME-ACTION.xml this content like

<body>
   <referenceContainer name="content">
       <uiComponent name="your_ui_form"/>
       <block class="Magento\Framework\View\Element\Template" name="XXX"  template="NAMESPACE_MODULENAME::html/js.phtml"/>
   </referenceContainer>
</body>

In js.phtml file create new saveHeader() function call ajax to submit form element to your custom module controller (php).

This sample for js.phtml file content:

require([
        'jquery',
        'jquery/ui',
        'Magento_Ui/js/modal/modal'
    ], function($){
            function saveHeader() {
                 $form = $('#formId');
                 $.ajax({
                        type: 'POST',
                        url: 'url',
                        data: {
                            xxx,
                            form_key: 'qiIiwjIPOdmrA0Uq',
                            return_session_messages_only: 1
                        },
                        dataType: 'json',
                        showLoader: true,
                        context: $form
                    })
                    ...
           }

Good Luck!

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