In Magento 2.2.5, I am creating admin grid by following this tutorial(Using layout Block method. Not UI Component).
In that I have a add button. I can't remove it. I need to remove it and add a new button with custom url. How to achieve this.
Screenshot:
-
Can you share your code?Chirag Patel– Chirag Patel2018年10月22日 09:21:56 +00:00Commented Oct 22, 2018 at 9:21
4 Answers 4
You can use update
parent::_construct();
$this->buttonList->update('save', 'onclick', 'setLocation(\'' . $this->getUrl('*/*/<youraction>') . '\')');
Try using this code
parent::_construct();
$this->removeButton('add');
$this->buttonList->add(
'<your name>',
[
'label' => __('<your label>'),
'class' => 'save',
'onclick' => 'setLocation(\'' . $this->getUrl('*/*/<youraction>') . '\')',
'style' => ' background-color: #ba4000; border-color: #b84002; box-shadow: 0 0 0 1px #007bdb;color: #fff;text-decoration: none;'
]
);
Hope that will help you.
-
Yes, It is working. I have tried this but before
parent::_construct();i added this remove button code. So It is not worked.Saravanan DS– Saravanan DS2018年10月16日 07:42:25 +00:00Commented Oct 16, 2018 at 7:42
Try using this code
protected function _construct()
{
$this->_objectId = 'row_id';
$this->_blockGroup = '[Vendor_name]_[module_name]';
$this->_controller = 'adminhtml_[Controller_name]';
parent::_construct();
// for remove btn
$this->buttonList->remove('save');
$this->buttonList->remove('back');
$this->buttonList->remove('reset');
///// for update btn name
$this->buttonList->update('save', 'label', __('[Updateed_btn_name]'));
/// for add new custome btn
$this->addButton(
'<custome_btn_name>',
[
'label' => __('Btn_name_to_show'),
'on_click' => sprintf("location.href = '%s';", $this->getUrl('[Route_name]/[controller_name]/[file_name]')),
'class' => 'primary',
'level' => 1
]
);
}
[Update]
Another way to add button into Ui-Component
Step-1: Create Generic.php at app/code/VendoreName/ModuleName/Block/Adminhtml/Edit/Button
<?php
namespace VendoreName\ModuleName\Block\Adminhtml\Edit\Button;
use Magento\Backend\Block\Widget\Context;
use Magento\Cms\Api\PageRepositoryInterface;
class Generic
{
protected $context;
protected $pageRepository;
public function __construct(
Context $context,
PageRepositoryInterface $pageRepository
) {
$this->context = $context;
$this->pageRepository = $pageRepository;
}
public function getUrl($route = '', $params = [])
{
return $this->context->getUrlBuilder()->getUrl($route, $params);
}
}
Step-2: Create Back.php at app/code/VendoreName/ModuleName/Block/Adminhtml/Edit/Button
<?php
namespace VendoreName\ModuleName\Block\Adminhtml\Edit\Button;
use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface;
class Back extends Generic implements ButtonProviderInterface
{
public function getButtonData()
{
return [
'label' => __('Back'),
'on_click' => sprintf("location.href = '%s';", $this->getBackUrl()),
'class' => 'back',
'sort_order' => 10,
];
}
public function getBackUrl()
{
return $this->getUrl('*/*/');
}
}
Step-3: Create Reset.php at app/code/VendoreName/ModuleName/Block/Adminhtml/Edit/Button
<?php
namespace VendoreName\ModuleName\Block\Adminhtml\Edit\Button;
use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface;
class Reset implements ButtonProviderInterface
{
public function getButtonData()
{
return [
'label' => __('Reset'),
'class' => 'reset',
'on_click' => 'location.reload();',
'sort_order' => 30,
];
}
}
Step-4: Create Delete.php at app/code/VendoreName/ModuleName/Block/Adminhtml/Edit/Buttons
<?php
namespace VendoreName\ModuleName\Block\Adminhtml\Edit\Button;
use Magento\Backend\Block\Widget\Context;
use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface;
class Delete extends Generic implements ButtonProviderInterface
{
protected $context;
public function __construct(
Context $context
) {
$this->context = $context;
}
public function getButtonData()
{
$data = [];
$id = $this->context->getRequest()->getParam('id');
if ($id) {
$data = [
'label' => __('Delete'),
'class' => 'delete',
'on_click' => 'deleteConfirm(\'' . __(
'Are you sure you want to delete this?'
) . '\', \'' . $this->getDeleteUrl() . '\')',
'sort_order' => 20,
];
}
return $data;
}
public function getDeleteUrl()
{
$id = $this->context->getRequest()->getParam('id');
return $this->getUrl('*/*/delete', ['id' => $id]);
}
}
Step-5: Create Save.php at app/code/VendoreName/ModuleName/Block/Adminhtml/Edit/Button
<?php
namespace VendoreName\ModuleName\Block\Adminhtml\Edit\Button;
use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface;
use Magento\Ui\Component\Control\Container;
class Save extends Generic implements ButtonProviderInterface
{
public function getButtonData()
{
return [
'label' => __('Save'),
'class' => 'save primary',
'data_attribute' => [
'mage-init' => [
'buttonAdapter' => [
'actions' => [
[
'targetName' => 'your_form_ui_component_name.your_form_ui_component_name',
'actionName' => 'save',
'params' => [
false,
],
],
],
],
],
],
];
}
}
Step-6: In your Form Ui-Component file at app/code/VendoreName/ModuleName/view/adminhtml/ui_component add below code:
................................................................................................................
<argument name="data" xsi:type="array">
............................................................................................................
<item name="buttons" xsi:type="array">
<item name="back" xsi:type="string">VendoreName\ModuleName\Block\Adminhtml\Edit\Button\Back</item>
<item name="delete" xsi:type="string">VendoreName\ModuleName\Block\Adminhtml\Edit\Button\Delete</item>
<item name="reset" xsi:type="string">VendoreName\ModuleName\Block\Adminhtml\Edit\Button\Reset</item>
<item name="save" xsi:type="string">VendoreName\ModuleName\Block\Adminhtml\Edit\Button\Save</item>
</item>
............................................................................................................
</argument>
................................................................................................................
I Hope This Helps You.
use this if you are using ui component
<item name="buttons" xsi:type="array">
<item name="complete" xsi:type="array">
<item name="name" xsi:type="string">add</item>
<item name="label" xsi:type="string">View Complete Orders</item>
<item name="class" xsi:type="string">primary</item>
<item name="url" xsi:type="string">afrax/create/complete</item>
</item>
<item name="pending" xsi:type="array">
<item name="processing" xsi:type="string">add</item>
<item name="label" xsi:type="string">View Pending Orders</item>
<item name="class" xsi:type="string">primary</item>
<item name="url" xsi:type="string">afrax/create/index</item>
</item>
<item name="cancel" xsi:type="array">
<item name="processing" xsi:type="string">add</item>
<item name="label" xsi:type="string">View Cancel Orders</item>
<item name="class" xsi:type="string">primary</item>
<item name="url" xsi:type="string">afrax/create/canceled</item>
</item>
</item>
Explore related questions
See similar questions with these tags.