mage2kishan/module-admin-menu-manager

Customises the Magento 2 backend menu — hide, rename, re-icon, recolor, reorder and reparent any item, grouped into named 'views' you can flip between with one click. Includes an optional drilldown rendering style that adds a back button + search box to crowded L0 panels. Admin-only, no storefront i

Maintainers

Package info

github.com/mage2sk/module-admin-menu-manager

Homepage

Type:magento2-module

pkg:composer/mage2kishan/module-admin-menu-manager

Statistics

Installs: 5

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.1 2026-05-01 13:16 UTC

This package is auto-updated.

Last update: 2026-05-01 13:16:50 UTC


README

Panth Admin Menu Manager — Customise the Magento 2 Backend Menu | Panth Infotech

Magento 2.4.4 - 2.4.8 PHP 8.1 - 8.4 Hyvä Compatible Admin Only Packagist GitHub Upwork Top Rated Plus Panth Infotech Agency Website Get a Quote

Make the Magento admin feel like your admin. Hide noise, rename anything, re-icon, recolor, reorder and reparent any backend menu item — saved as named "views" you can switch between with one click. Includes a click-to-open drilldown rendering style with in-panel search and a full-viewport-height chrome that mirrors Magento's stock palette pixel-for-pixel.

Panth Admin Menu Manager turns Magento 2's static, hover-only backend navigation into a configurable surface every merchant can tailor to the way their team works:

  • Hide the menus your role never uses (e.g. Marketing on a strictly catalog-edit account).
  • Rename "Stores" to "Store Settings", "Catalog" to "Products", "Customers" to "Members" — whatever fits your business vocabulary.
  • Re-icon any item from a curated Bootstrap Icons library, an emoji, or a custom URL.
  • Recolor with a thin coloured stripe so the eye finds the item it's looking for in two milliseconds.
  • Reorder + reparent to put the items you actually use at the top of the rail, and bury the rest under "System".

All overrides are grouped into named views — keep a "merchandiser" view, a "support agent" view, a "default" view — and switch with Apply for me (per-user) or Set as system default (everyone). The Default view ships seeded so the grid is never empty, and the manager screen + Magento's stores / config / Backend menus are self-protected from being hidden so the merchant can always recover.

The optional drilldown rendering style replaces Magento's hover-to-open mega-menu with a click-to-open panel that fills the viewport height, carries a back button, and includes a per-panel search filter — invaluable on installs with 30+ extensions where the L0 menu has become unmanageable.

🚀 Need Custom Magento 2 Development?

Get a free quote for your project in 24 hours — custom modules, Hyvä themes, performance optimization, M1 → M2 migrations, and Adobe Commerce Cloud.

Get a Free Quote

🏆 Kishan Savaliya

Top Rated Plus on Upwork

Hire on Upwork

100% Job Success • 10+ Years Magento Experience Adobe Certified • Hyvä Specialist

🏢 Panth Infotech Agency

Magento Development Team

Visit Agency

Custom Modules • Theme Design • Migrations Performance • SEO • Adobe Commerce Cloud

Visit our website: kishansavaliya.com  |  Get a quote: kishansavaliya.com/get-quote

Table of Contents

Live Demo

A 2-minute walk-through of the full workflow — open the manager, edit a few rows, save a view, apply it, click into the drilldown panel:

Admin Menu Manager — full workflow

Screenshots

Manager grid — view switcher + per-row controls

Manager grid (default view) Same grid with overrides applied
Manager grid — views Manager grid — overrides applied

The toolbar above the grid lets you Apply for me (per-admin-user), Set as system default (everyone), spin off a New view, Rename, Duplicate, or Delete. The grid itself shows every menu item in Magento's compiled menu tree — relabel inline, paste a Bootstrap Icon class into the Icon column (or an emoji), pick a different parent, set a sort order, flip the Enabled toggle. Reset on any row removes that row's override.

Drilldown rendering style

Click-to-open L0 panel Drilled into a sub-section
Drilldown — Content L0 Drilldown — Content → Elements L1

L0 menus you've opted in (panth_drilldown/general/targets) open as a fixed-width drilldown panel that fills the full viewport height. A back arrow, an in-panel search filter, and a generous title bar replace Magento's stock hover behaviour. Non-target L0 menus keep Magento's default — so you can drilldown the busy ones (Stores, System) and leave Sales / Catalog / Customers alone.

Key Features

Per-Item Overrides (Saved Per View)

  • Disable — hide an item from the menu entirely (line-throughed in the grid for easy recovery)
  • Custom label — rename without touching XML; falls back to the stock label when blank
  • Custom icon — Bootstrap Icons class (bi-gear, bi-house, …), an emoji, or a url(...) to a SVG/PNG
  • Custom colour — hex value (#1F2E44, #eb5202, …) renders as a thin left stripe so the item stands out
  • Custom parent — move any item under any other item; great for collapsing related extensions under a single header
  • Sort order — fine-grained numeric override, applied per level so reordering one branch never disturbs another

Named Views — Multiple Presets, One-Click Switch

  • One row in panth_admin_menu_view per view, one default seeded by SeedDefaultView data patch
  • Apply for me — flips the active view for the current admin user only (cookie-backed, no DB write per session)
  • Set as system default — flips the global active view; affects every admin who hasn't picked their own
  • New / Rename / Duplicate / Delete — full CRUD on views from the same toolbar (Default view cannot be deleted)

Drilldown Rendering Style (opt-in per L0)

  • Click-to-open instead of hover — accidental hovers stop opening the wrong panel
  • Full viewport height chrome — the dark #4a4542 panel fills top-to-bottom matching Magento's stock submenu palette
  • In-panel search — type to filter the items by label or ID; matched items keep their parent expanded with a breadcrumb subtitle so identical leaf names ("Configuration", "Manage") stay distinguishable
  • Back button — drill into a sub-section, back arrow returns you to the parent without closing the panel
  • Esc closes, click-overlay closes — same UX patterns Magento ships
  • Per-target opt-in — pick which L0 menus get drilldown; the rest keep Magento's default hover behaviour
  • Auto-included — every Panth_* L0 menu is always in the drilldown set regardless of admin selection

Open in New Tab — for items you reference alongside another page

  • Add menu IDs to panth_drilldown/general/new_tab_targets (one per line)
  • Matching links inside the drilldown panel get target="_blank", rel="noopener", an updated title and a small external-link icon next to the label
  • Useful for Admin Menu Manager itself, Configuration, Cache Management — anything you want to keep open beside your current grid

Self-Protection (you can never lock yourself out)

The MenuBuilderPlugin tracks a small SELF_PROTECT_IDS set:

  • Panth_AdminMenuManager::menu_manager
  • Magento_Backend::stores
  • Magento_Backend::stores_settings
  • Magento_Config::config

A disable override on any of these is silently ignored at apply time, so even if a backup of panth_admin_menu_override accidentally hides the manager, the merchant can still navigate to it and undo.

Magento-Native Visual Palette

  • Orange #eb5202 primary buttons matching Magento's stock Save Config style
  • 13px body type matching adminhtml typography across rows, inputs, dropdowns and buttons
  • Bootstrap Icons as the default icon library (CSS shipped with the module — no CDN, no font dependency)
  • Drilldown chrome copied from Magento's compiled adminhtml — #4a4542 panel, #fcfcfc text, #403934 hover, #322c29 active
  • Theme-agnostic on the admin side — the storefront is never touched

Why a Menu Manager

Magento's backend menu was designed for someone who installs Magento and stops. The reality on a typical merchant's account:

  • 30+ extensions each adding 2–6 menu items, mostly to Stores → Settings or System → Tools. Finding "the thing I need to click" becomes a daily search.
  • Multiple roles — a merchandiser doesn't need System → Web Setup Wizard, a developer doesn't need Marketing → Communications → Newsletter Templates. But everyone sees everything.
  • Stock vocabulary — "Stores", "Inventory", "Marketing" make sense to Magento engineers. They're not always what merchants call those concepts internally.

Panth Admin Menu Manager fixes the symptom without forking core: the database row of overrides applies after Magento has compiled its menu, so every extension's menu remains discoverable and the overrides survive every setup:upgrade.

Compatibility

Magento Open Source / Adobe Commerce 2.4.4 — 2.4.8
PHP 8.1 — 8.4
Themes Admin (Magento backend) — theme-agnostic on the admin side; the module never touches your storefront theme
Other modules No collisions known — the plugin is afterGetResult on \Magento\Backend\Model\Menu\Builder and only mutates the existing tree

Installation

composer require mage2kishan/module-admin-menu-manager
bin/magento module:enable Panth_AdminMenuManager
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:flush

The SeedDefaultView data patch creates the Default view automatically so the manager grid is never empty.

Where to Find It

After install you'll find Admin Menu Manager in two places:

  1. Stores → Settings → Admin Menu Manager — the grid where you customise menu items
  2. Panth Infotech → Admin Menu Manager → Manager / Configuration — shortcut group matching every other Panth_* module's layout

The Configuration link points at Stores → Configuration → Panth → Admin Menu Manager for the drilldown-related toggles (master switch, target L0 menus, "open in new tab" list).

The Manager Grid

Each row represents one item in Magento's compiled backend menu. Editable columns:

Column What it does
Menu item Indented tree label with an icon preview + chevron to expand children. Read-only here — edit in Custom label.
ID Stock Magento menu ID (Magento_Sales::sales, Panth_Faq::group, …). Read-only.
Custom label Override the visible text. Blank = use stock label.
Icon (bi-…) Bootstrap Icon class (bi-house, bi-graph-up), or any Unicode emoji, or url(…) for a custom image. Click Browse icons (top-right) to open the Bootstrap Icons gallery in a new tab.
Parent Move under a different parent. Highlighted when the row's parent is overridden.
Sort Numeric override; lower numbers float to the top of their level.
Enabled On = the item shows. Off = hidden. Self-protected items (Admin Menu Manager itself, Stores, Configuration, the global Backend node) reject Off.
Reset Removes this row's override only. Other overrides for the same view stay.

A Quick search box filters by label or ID; Expand all / Collapse all toggles every level at once; the Save changes button at the bottom flushes the menu cache so a refresh of the admin tab shows the new layout.

Named Views — Per-User and System-Wide

Views are presets of overrides that you can switch between with one click.

  • Apply for me — sets a per-admin-user cookie pointing at a view; only this admin's session uses it
  • Set as system default — flips the is_active flag on a view; everyone who hasn't picked their own falls back to it
  • New view — creates an empty named view (no overrides yet); flip to it and start editing
  • Rename / Duplicate / Delete — Default view cannot be deleted; otherwise these are unrestricted

Common patterns:

  • Default (system default) — light cleanup that everyone benefits from
  • Merchandiser — hides everything outside Catalog + Marketing
  • Support — surfaces Customers, Sales (Orders), and the most-used Reports
  • Developer — keeps everything visible, plus relabels with shorter names

Drilldown Rendering Style

The hover-to-open mega-menu Magento ships with works for ~15 menu items. Past that, an L0 panel becomes a wall of text and the wrong panel keeps opening when you mouse past it.

This module ships an opt-in drilldown rendering style:

  1. Click-to-open — Magento's _show class is preserved; only the click target changes. Hover does nothing.
  2. Full-viewport panel — the panel fills 100vh, dark #4a4542 background, no white bleed.
  3. In-panel search — keystroke filters items by label or ID, with a breadcrumb subtitle showing the parent chain so identical leaf names stay distinguishable.
  4. Back button — drill into a sub-section, back arrow returns to the parent without closing the panel.
  5. Esc closes — keyboard-friendly out of the box.

Configure under Stores → Configuration → Panth → Admin Menu Manager → Apply to top-level menus — multiselect of every L0 menu Magento knows about. Unselected menus keep Magento's default hover behaviour. All Panth_* L0 menus are auto-included so the drilldown experience is consistent across every Panth module.

Open in a New Tab

Some menu items pair best with a second tab — Cache Management open beside your product grid, the Admin Menu Manager open beside the page you're customising for. Add their IDs (one per line) to Stores → Configuration → Panth → Admin Menu Manager → Open in a new tab — Menu IDs:

Panth_AdminMenuManager::menu_manager
Panth_AdminMenuManager::configuration

Inside the drilldown panel, matching <a> tags get target="_blank", rel="noopener", an updated title ("… opens in new tab") and a small external-link SVG appended next to the label so the user knows the click will spawn a new tab.

Self-Protection

The MenuBuilderPlugin will never honour a disable override on:

  • Panth_AdminMenuManager::menu_manager (the manager screen itself)
  • Magento_Backend::stores
  • Magento_Backend::stores_settings
  • Magento_Config::config

This is hard-coded in the plugin's SELF_PROTECT_IDS set so even a corrupted import of panth_admin_menu_override rows can't lock the merchant out of the four pages they need to recover.

The Targets backend model also auto-injects every Panth_* L0 menu into the drilldown target list on save — so a merchant who unchecks all targets still gets the drilldown on Panth modules they install in the future.

Configuration

Stores → Configuration → Panth → Admin Menu Manager (or the Configuration shortcut under Panth Infotech → Admin Menu Manager in the menu).

Field Path Default Notes
Open Admin Menu Manager n/a n/a Quick-jump button to the manager grid
Enable drill-down panth_drilldown/general/enabled 1 Master switch. When off, every admin menu uses Magento's default hover behaviour.
Apply to top-level menus panth_drilldown/general/targets (empty + Panth_* always-on) Multiselect of L0 menus to drilldown. Unselected = stock hover.
Open in a new tab — Menu IDs panth_drilldown/general/new_tab_targets (empty) One menu ID per line. Items get target="_blank" + an external-link icon.

How It Works

                    request hits admin
                           │
                           ▼
          ┌────────────────────────────────────┐
          │  Magento\Backend\Model\Menu\Builder│
          │  ::getResult()                     │
          │  (compiles the stock menu tree)    │
          └────────────────────────────────────┘
                           │
                           ▼
       afterGetResult plugin (our MenuBuilderPlugin)
                           │
        ┌──────────────────┴───────────────────┐
        │ load active view's overrides         │
        │  (per-user cookie wins; else system) │
        └──────────────────┬───────────────────┘
                           │
        ┌──────────────────┴───────────────────┐
        │ Pass 1 — apply label / icon / colour │
        │          / disable, recurse the tree │
        │ Pass 2 — execute parent moves        │
        │ Pass 3 — re-sort touched levels      │
        └──────────────────┬───────────────────┘
                           │
                           ▼
            return mutated Menu to Magento

Two database tables back the feature:

  • panth_admin_menu_viewview_id, label, is_active, is_default, timestamps. One row per saved preset.
  • panth_admin_menu_overrideview_id, menu_item_id, is_disabled, custom_label, custom_icon, custom_color, custom_parent_menu_item_id, sort_order, timestamps. One row per overridden menu item.

The drilldown UI is layered on top of Magento's compiled adminhtml — no default.xml override, no replacement of the global navigation block. The JS subscribes to Magento's existing _show/_hide class changes via MutationObserver so any future change to mage/adminhtml/globalNavigation is automatically inherited.

Uninstall

bin/magento module:disable Panth_AdminMenuManager
composer remove mage2kishan/module-admin-menu-manager
bin/magento setup:upgrade

To wipe stored views/overrides:

DROP TABLE IF EXISTS panth_admin_menu_override;
DROP TABLE IF EXISTS panth_admin_menu_view;
DELETE FROM core_config_data WHERE path LIKE 'panth_drilldown/%';

Troubleshooting

The new menu doesn't appear after I clicked Save. Magento's backend menu is cached. Saving flushes the menu cache automatically — but the admin tab you're already on still has the old DOM. Refresh the admin tab (or click any other menu item) and the new layout shows up.

I disabled an item but it's still visible. Check whether you're editing the active view. The dropdown next to the View label shows the per-user active view (or the system default). If you edit Default but you've personally activated Merchandiser, your edits won't show until you switch back or apply the changed view.

The drilldown won't open on hover anymore. That's by design. The drilldown is click-to-open; hover does nothing on opted-in L0 menus. Click the L0 label or icon to open the panel.

A menu item I rely on disappeared after I imported a backup. Truncate panth_admin_menu_override for the active view to wipe its overrides, or DELETE FROM panth_admin_menu_view and re-run bin/magento setup:upgrade to reseed the Default view.

FAQ

Q: Does this affect storefront menus? A: No. The plugin only attaches to \Magento\Backend\Model\Menu\Builder — a backend-only class. Your storefront top nav, mega menu, and category tree are completely untouched.

Q: Can different admin users see different menus? A: Yes — that's exactly what the Apply for me button does. It writes a cookie pointing at a view; the plugin reads the cookie and prefers it over the system default for that user's session.

Q: Will it survive setup:upgrade? A: Yes. The override rows live in their own tables, not in XML config or generated code. setup:upgrade doesn't touch them.

Q: Can I export views to deploy to staging / production? A: panth_admin_menu_view + panth_admin_menu_override are plain DB tables — mysqldump --no-create-info them and import on the target. The next admin page load will pick them up.

Q: Does the drilldown work on Hyvä? A: The drilldown is admin-only (Magento backend), so the storefront theme is irrelevant — Hyvä storefronts work fine. The admin chrome itself is theme-agnostic.

Q: Will it conflict with other modules that customise the admin menu? A: The plugin runs afterGetResult so any other plugin's mutations are visible to ours. As long as the other module emits standard \Magento\Backend\Model\Menu\Item rows, our overrides apply on top of them. (Panth_* modules are mutually compatible by design.)

Support

💼 Custom development Get a free quote — reply within 24 hours
📧 Email kishansavaliyakb@gmail.com
🌐 Website kishansavaliya.com
🐙 Issues GitHub issue tracker
💬 Hire on Upwork Top Rated Plus profile — 100% job success, 10+ years Magento
🏢 Agency Panth Infotech — full-service Magento + Hyvä team

About Panth Infotech

Panth Infotech is a Magento-focused development team led by Kishan Savaliya — Adobe Certified, Top Rated Plus on Upwork, and a Hyvä specialist with 10+ years of Magento experience. We ship custom modules, Hyvä themes, performance optimization, M1 → M2 migrations, and Adobe Commerce Cloud projects for merchants and agencies worldwide.

More extensions in the Panth catalogue — see the full list on Packagist or browse the GitHub org.

If this module saves your team a few clicks a day, please ⭐ the repo.
And if there's an admin-menu pain we missed, open an issue — happy to talk through it.