In this article, we are going to discuss about applying condition on the massaction. The following are the steps to implement this.
Step 1: Display Massaction on the content Pages in Magento2
Step 2: Apply Condition to Show or Hide Newly Created Massaction
Lets start…
Step 1: Display Massaction on the content Pages in Magento2
Lets assume that you need to display massaction on the Admin – Content Pages.
Create file located at Thecoachsmb/ToggleMassaction/view/adminhtml/ui_component/cms_page_listing.xml
and content will be:-
<?xml version="1.0" encoding="UTF-8"?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"> <listingToolbar name="listing_top"> <massaction name="listing_massaction" class="Thecoachsmb\ToggleMassaction\Ui\Component\MassAction"> <action name="custommassaction"> <settings> <confirm> <message translate="true">Are you sure to perform Action for selected customers?</message> <title translate="true">Custom MassAction</title> </confirm> <url path="extension/controller/massAction"/> <!-- your custom controller to handle request --> <type>custommassaction</type> <label translate="true">Custom MassAction</label> </settings> </action> </massaction> </listingToolbar> </listing>
Step 2: Apply Condition to Show or Hide Newly Created Massaction
Create file at
Thecoachsmb\ToggleMassaction\Ui\Component\MassAction.php
and content will be :
<?php
namespace Thecoachsmb\ToggleMassaction\Ui\Component;
use Magento\Contact\Helper\Data;
class MassAction extends \Magento\Ui\Component\MassAction
{
/**
* @param \Magento\Framework\App\Helper\Context $context
* @param \Magento\Customer\Model\Session $customerSession
* @param CustomerViewHelper $customerViewHelper
*/
public function __construct(
\Magento\Framework\App\Helper\Context $context,
Data $contacthelper
) {
$this->contacthelper = $contacthelper;
parent::__construct($context);
}
public function prepare()
{
parent::prepare();
$result = $this->contacthelper->isEnabled();
if ($result == 0) {
$config = $this->getConfiguration();
$notAllowedActions = ['custommassaction'];
$allowedActions = [];
foreach ($config['actions'] as $action) {
if (!in_array($action['type'], $notAllowedActions)) {
$allowedActions[] = $action;
}
}
$config['actions'] = $allowedActions;
$this->setData('config', (array)$config);
}
}
}
We have applied the condition that the if the contact us module is enabled then show this massaction.
