Skip to content

Instantly share code, notes, and snippets.

@magevision
Last active November 5, 2021 12:00
Show Gist options
  • Save magevision/3d00637fc9e0a022ac8329e1dfa92124 to your computer and use it in GitHub Desktop.
Save magevision/3d00637fc9e0a022ac8329e1dfa92124 to your computer and use it in GitHub Desktop.
AddAButtonInSystemConfiguration
<?php
namespace MageVision\Blog56\Controller\Adminhtml\System\Config;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Controller\Result\Json;
use Magento\Framework\Controller\Result\JsonFactory;
class CustomButton extends Action
{
protected $resultJsonFactory;
/**
* @param Context $context
* @param JsonFactory $resultJsonFactory
*/
public function __construct(
Context $context,
JsonFactory $resultJsonFactory
) {
$this->resultJsonFactory = $resultJsonFactory;
parent::__construct($context);
}
/**
* @return Json
*/
public function execute()
{
$message = 'Success';
//Add your functionality
/** @var Json $result */
$result = $this->resultJsonFactory->create();
return $result->setData(['message' => $message]);
}
}
<script>
require([
'jquery',
'prototype'
], function ($) {
$('#custom_button').click(function () {
var params = {};
new Ajax.Request('<?php echo $block->getAjaxUrl() ?>', {
parameters: params,
loaderArea: false,
asynchronous: true,
onCreate: function () {
$('#custom_button_response_message').text('');
},
onSuccess: function (transport) {
var resultText = '';
if (transport.status > 200) {
resultText = transport.statusText;
} else {
var response = JSON.parse(transport.responseText);
resultText = response.message
}
$('#custom_button_response_message').text(resultText);
}
});
});
});
</script>
<?php echo $block->getButtonHtml(); ?>
<p>
<span id="custom_button_response_message"></span>
</p>
<?php
namespace MageVision\Blog56\Block\System\Config;
use Magento\Backend\Block\Template\Context;
use Magento\Config\Block\System\Config\Form\Field;
use Magento\Framework\Data\Form\Element\AbstractElement;
use Magento\Framework\Exception\LocalizedException;
class CustomButton extends Field
{
/**
* @var string
*/
protected $_template = 'MageVision_Blog56::system/config/custom_button.phtml';
/**
* @param Context $context
* @param array $data
*/
public function __construct(
Context $context,
array $data = []
) {
parent::__construct($context, $data);
}
/**
* Remove scope label
*
* @param AbstractElement $element
*
* @return string
*/
public function render(AbstractElement $element)
{
$element->unsScope()->unsCanUseWebsiteValue()->unsCanUseDefaultValue();
return parent::render($element);
}
/**
* Return element html
*
* @param AbstractElement $element
*
* @return string
*/
protected function _getElementHtml(AbstractElement $element)
{
return $this->_toHtml();
}
/**
* Return ajax url for custom button
*
* @return string
*/
public function getAjaxUrl()
{
return $this->getUrl('blog56/system_config/customButton');
}
/**
* @throws LocalizedException
*
* @return string
*/
public function getButtonHtml()
{
$button = $this->getLayout()->createBlock(
'Magento\Backend\Block\Widget\Button'
)->setData(
[
'id' => 'custom_button',
'label' => __('Custom Button'),
]
);
return $button->toHtml();
}
}
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
<tab id="magevision" translate="label" sortOrder="1000">
<label>MageVision Blog Posts</label>
</tab>
<section id="blog56" translate="label" type="text" sortOrder="1012" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Blog Post 56</label>
<tab>magevision</tab>
<resource>MageVision_Blog56::blog56_configuration</resource>
<group id="post" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
<label>General</label>
<field id="custom_button" translate="label comment" type="button" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="0">
<label>Custom Button</label>
<frontend_model>MageVision\Blog56\Block\System\Config\CustomButton</frontend_model>
</field>
</group>
</section>
</system>
</config>
@magevision
Copy link
Author

Hello, this code is only for Magento 2.

@edumaciel10
Copy link

If you have an example with Magento1 can you send it to me?

@magevision
Copy link
Author

Unfortunately we don't have an example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment