Question

I'm trying to create a super simple Admin module that will add a button to the Cache Management page. So far I have created the following files.

Gamma/ExtendedAdmin/registration.php:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Gamma_ExtendedAdmin',
    __DIR__
);

Gamma/ExtendedAdmin/etc/module.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Gamma_ExtendedAdmin" setup_version="2.1.0">
    </module>
</config>

Gamma/ExtendedAdmin/view/adminhtml/layout/adminhtml_cache_index.xml:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <update handle="formkey"/>
    <update handle="adminhtml_cache_block"/>
    <body>
        <referenceContainer name="content">
            <block class="Gamma\ExtendedAdmin\Block\Cache" name="adminhtml.cache.container"/>
            <block class="Magento\Backend\Block\Cache\Additional" name="cache.additional" template="Magento_Backend::system/cache/additional.phtml"/>
        </referenceContainer>
    </body>
</page>

Gamma/ExtendedAdmin/Block/Cache.php:

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Gamma\ExtendedAdmin\Block;

/**
 * @api
 * @since 100.0.2
 */
class Cache extends \Magento\Backend\Block\Widget\Grid\Container
{
    /**
     * Class constructor
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_controller = 'cache';
        $this->_headerText = __('Cache Storage Management');
        parent::_construct();
        $this->buttonList->remove('add');
        $this->buttonList->add(
            'flush_magento',
            [
                'label' => __('Flush Magento Cache'),
                'onclick' => 'setLocation(\'' . $this->getFlushSystemUrl() . '\')',
                'class' => 'primary flush-cache-magento'
            ]
        );

        $message = __('The cache storage may contain additional data. Are you sure that you want to flush it?');
        $this->buttonList->add(
            'flush_system',
            [
                'label' => __('Flush Cache Storage'),
                'onclick' => 'confirmSetLocation(\'' . $message . '\', \'' . $this->getFlushStorageUrl() . '\')',
                'class' => 'flush-cache-storage'
            ]
        );
        $this->buttonList->add(
            'flush_varnish_cache',
            [
                'label' => __('Flush Varnish Cache'),
                'onclick' => 'confirmSetLocation(\'' . $message . '\', \'' . $this->getFlushVarnishUrl() . '\')',
                'class' => 'flush-varnish-cache'
            ]
        );
    }

    /**
     * Get url for clean cache storage
     *
     * @return string
     */
    public function getFlushStorageUrl()
    {
        return $this->getUrl('adminhtml/*/flushAll');
    }

    /**
     * Get url for clean cache storage
     *
     * @return string
     */
    public function getFlushVarnishUrl()
    {
        return $this->getUrl('/run/cleanCache.php');
    }

    /**
     * Get url for clean cache storage
     *
     * @return string
     */
    public function getFlushSystemUrl()
    {
        return $this->getUrl('adminhtml/*/flushSystem');
    }
}

I have enabled the extension but when I go to the cache management page the button is not present. I'm sure I'm missing something as this is my first Admin module. Any help you guys can offer to get this button to show up would be appreciated greatly!

EDIT: I have done some more testing and discovered if I change vendor/magento/module-backend/view/adminhtml/layout/adminhtml_cache_index.xml to match my version it works. So it seems there is something wrong with my adminhtml_cache_index.xml file that isn't pointing it at my Cache.php file.

Was it helpful?

Solution

Edit your module.xml with this code -

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Gamma_ExtendedAdmin" setup_version="2.1.0">
        <sequence>
            <module name="Magento_Backend"/>
        </sequence>
    </module>
</config>

in above code you just need dependency of core module Magento_Backend

then run command -

php bin magento setup:upgrade

chmod -R 777 var/ generated

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top