So i have created a Magento 2 theme based on Blank, and the customer wants the submenu of the navigation to be a big window instead of the little dropdown that comes out of the box. They also want custom links in this window..
Im totally lost, I have inserted the topmenu.phtml into the theme and from there i can only tweak so much.. It would be great if i could get the submenu out of the menu such as this:
<nav class="custom navigation" data-action="navigation">
<ul data-mage-init='{"menu":{"responsive":true, "expanded":true, "position":{"my":"left top","at":"left bottom"}}}'>
<?php /* @escapeNotVerified */ echo $_menu; ?>
<div class="custom-submenu">
<!-- custom div for submenu -->
</div>
<?php /* @escapeNotVerified */ echo $block->getChildHtml(); ?>
</ul>
But the function for $_menu is quite complicated and i havent managed to get the backend of topmenu.php into my project properly.
Moving stuff around in the default.xml doesnt help since i need to build a layout for the block/div with custom links and styling.
What do i do? Buying extensions like mega-menu is not an option..
Building a whole new module with the category-navigation seems super hard and overkill?
Best Answer
I've also been looking into this for the past few days. The Magento 2 blank theme uses out of the box jquery ui for the menu. I was able to use CSS to stretch the drop down to full width but I couldn't get custom links working in this or multiple columns under one drop down. I think the only option is to write a module or plugin to reformat the html. Remember that if you write a plugin you can only use this to override public methods. I'm looking at overriding or writing something to run before/after the getHTML function in Magento\Theme\Block\Html\Topmenu
Another possibility may be to remove the menu.js jquery part and write something entirely custom for this but I think you still wouldn't be able do anything about custom links without a plugin.