How to put a PHP function in a Button “on click” attribute?
-
14-04-2021 - |
题
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.
So, actually i want to use this "Save Header" button to just save two fields of the form, the fields (Nome Header, Valor Header).
The "on click" attribute. In this "on click" i want to call a php function...
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>
------------------------------EDIT---------------------------------
So now my "SaveHeader" button is like that, but still don't working, maybe the url is passed wrong:
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);
}
}
解决方案
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.
其他提示
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!