Skip to content

Instantly share code, notes, and snippets.

@jerrylopez
Forked from elenakondrateva/Topmenu.php
Created January 29, 2020 13:18
Show Gist options
  • Select an option

  • Save jerrylopez/d52c2803ae2e0a0fe475463e638a86f0 to your computer and use it in GitHub Desktop.

Select an option

Save jerrylopez/d52c2803ae2e0a0fe475463e638a86f0 to your computer and use it in GitHub Desktop.
Move Magento2 top menu categories under second level
<?php
namespace Acme\Topmenu\Plugin\Theme\Block\Html;
use Magento\Framework\Data\Tree\NodeFactory;
use Magento\Framework\Data\TreeFactory;
use Magento\Framework\Data\Tree\Node;
use Magento\Framework\Data\Tree;
class Topmenu
{
/**
* @var NodeFactory
*/
protected $nodeFactory;
/**
* @var TreeFactory
*/
protected $treeFactory;
/**
* Topmenu constructor.
* @param NodeFactory $nodeFactory
* @param TreeFactory $treeFactory
*/
public function __construct(
NodeFactory $nodeFactory,
TreeFactory $treeFactory
) {
$this->nodeFactory = $nodeFactory;
$this->treeFactory = $treeFactory;
}
public function beforeGetHtml(
\Magento\Theme\Block\Html\Topmenu $subject,
$outermostClass = '',
$childrenWrapClass = '',
$limit = 0
) {
/** @var Node $menu */
$menu = $subject->getMenu();
/** @var Tree $menuTree */
$menuTree = $menu->getTree();
/*** move categories under second level ***/
$categoriesNode = $this->getCategoriesNode($menuTree);
$menuNodesCollection = $menu->getChildren();
/** @var Node $categoryMenuItemNode */
foreach ($menuNodesCollection as $categoryMenuItemNode) {
$categoriesNode->addChild(clone $categoryMenuItemNode);
$menuNodesCollection->delete($categoryMenuItemNode);
}
$menu->addChild($categoriesNode);
}
/**
* @param Tree $tree
* @return Node
*/
private function getCategoriesNode(Tree $tree)
{
return $this->nodeFactory->create(
[
'data' => [
'name' => __('Category'),
'id' => 'categories',
'url' => '/categories/',
'has_active' => false,
'is_active' => false // (expression to determine if menu item is selected or not)
],
'idField' => 'id',
'tree' => $tree
]
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment