UltimenuTree.php in Ultimenu 8.2
File
src/UltimenuTree.php
View source
<?php
namespace Drupal\ultimenu;
use Drupal\Component\Utility\Html;
use Drupal\Core\Menu\MenuLinkTreeInterface;
use Drupal\Core\Menu\MenuActiveTrailInterface;
use Drupal\Core\Menu\MenuTreeParameters;
use Drupal\system\Entity\Menu;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Symfony\Component\DependencyInjection\ContainerInterface;
class UltimenuTree implements UltimenuTreeInterface {
use StringTranslationTrait;
protected $menuTree;
protected $menuActiveTrail;
public function __construct(MenuLinkTreeInterface $menu_tree, MenuActiveTrailInterface $menu_active_trail) {
$this->menuTree = $menu_tree;
$this->menuActiveTrail = $menu_active_trail;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('menu.link_tree'), $container
->get('menu.active_trail'));
}
public function getMenuTree() {
return $this->menuTree;
}
public function getMenuActiveTrail() {
return $this->menuActiveTrail;
}
public function getMenus() {
$custom_menus = [];
if ($menus = Menu::loadMultiple()) {
foreach ($menus as $menu_name => $menu) {
$custom_menus[$menu_name] = Html::escape($menu
->label());
}
}
$excluded_menus = [
'admin' => $this
->t('Administration'),
'devel' => $this
->t('Development'),
'tools' => $this
->t('Tools'),
];
$options = array_diff_key($custom_menus, $excluded_menus);
asort($options);
return $options;
}
public function loadMenuTree($menu_name) {
$parameters = new MenuTreeParameters();
$parameters
->setTopLevelOnly()
->onlyEnabledLinks();
$tree = $this->menuTree
->load($menu_name, $parameters);
$manipulators = [
[
'callable' => 'menu.default_tree_manipulators:checkAccess',
],
[
'callable' => 'menu.default_tree_manipulators:generateIndexAndSort',
],
[
'callable' => 'menu.default_tree_manipulators:flatten',
],
];
$tree = $this->menuTree
->transform($tree, $manipulators);
return $tree;
}
public function loadSubMenuTree($menu_name, $link_id, $title = '') {
$build = [];
$level = 1;
$depth = 4;
$parameters = $this->menuTree
->getCurrentRouteMenuTreeParameters($menu_name);
$parameters
->setRoot($link_id)
->excludeRoot()
->onlyEnabledLinks();
$parameters
->setMaxDepth(min($level + $depth - 1, $this->menuTree
->maxDepth()));
$tree = $this->menuTree
->load($menu_name, $parameters);
$manipulators = [
[
'callable' => 'menu.default_tree_manipulators:checkAccess',
],
[
'callable' => 'menu.default_tree_manipulators:generateIndexAndSort',
],
];
$tree = $this->menuTree
->transform($tree, $manipulators);
if ($tree) {
$build['content'] = $this->menuTree
->build($tree);
$css_name = Html::cleanCssIdentifier(mb_strtolower($menu_name . '-' . $title));
$build['#attributes']['class'] = [
'ultimenusub',
'ultimenusub--' . $css_name,
];
$build['#theme_wrappers'][] = 'container';
}
return $build;
}
}