3

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:

Screenshot

asked Oct 16, 2018 at 7:00
1
  • Can you share your code? Commented Oct 22, 2018 at 9:21

4 Answers 4

6

You can use update

parent::_construct();
$this->buttonList->update('save', 'onclick', 'setLocation(\'' . $this->getUrl('*/*/<youraction>') . '\')');
answered Oct 16, 2018 at 7:57
2

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.

answered Oct 16, 2018 at 7:15
1
  • Yes, It is working. I have tried this but before parent::_construct(); i added this remove button code. So It is not worked. Commented Oct 16, 2018 at 7:42
2

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.

answered Oct 20, 2019 at 8:13
0
1

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>
answered Jun 16, 2021 at 13:44

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.