MenuLinkTree.php in Colossal Menu 8
File
src/Menu/MenuLinkTree.php
View source
<?php
namespace Drupal\colossal_menu\Menu;
use Drupal\Core\Access\AccessibleInterface;
use Drupal\Component\Utility\Html;
use Drupal\Core\Controller\ControllerResolverInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Menu\MenuActiveTrailInterface;
use Drupal\Core\Menu\MenuLinkTreeElement;
use Drupal\Core\Menu\MenuLinkTree as CoreMenuLinkTree;
use Drupal\Core\Menu\MenuTreeStorageInterface;
use Drupal\Core\Routing\RouteProviderInterface;
class MenuLinkTree extends CoreMenuLinkTree {
protected $entityTypeManager;
public function __construct(MenuTreeStorageInterface $tree_storage, RouteProviderInterface $route_provider, MenuActiveTrailInterface $menu_active_trail, ControllerResolverInterface $controller_resolver, EntityTypeManagerInterface $entity_type_manager) {
$this->treeStorage = $tree_storage;
$this->routeProvider = $route_provider;
$this->menuActiveTrail = $menu_active_trail;
$this->controllerResolver = $controller_resolver;
$this->entityTypeManager = $entity_type_manager;
}
protected function createInstances(array $data_tree) {
$tree = [];
foreach ($data_tree as $key => $element) {
$subtree = $this
->createInstances($element['subtree']);
$tree[$key] = new MenuLinkTreeElement($element['link'], (bool) $element['has_children'], (int) $element['depth'], (bool) $element['in_active_trail'], $subtree);
if ($tree[$key]->link instanceof AccessibleInterface) {
$tree[$key]->access = $tree[$key]->link
->access('view', NULL, TRUE);
}
}
return $tree;
}
public function build(array $tree) {
$build = parent::build($tree);
if (isset($build['#theme'])) {
$build['#theme'] = 'colossal_menu__' . strtr($build['#menu_name'], '-', '_');
}
if (!empty($build['#items'])) {
$this
->addItemContent($build['#items']);
}
return $build;
}
protected function addItemContent(array &$tree) {
foreach ($tree as &$item) {
$link = $item['original_link'];
$item['show_title'] = $link
->showTitle();
$item['identifier'] = Html::cleanCssIdentifier($link
->getMachineName());
$item['has_link'] = TRUE;
if (!$link
->isExternal() && $link
->getRouteName() == '<none>') {
$item['has_link'] = FALSE;
}
$item['content'] = $this->entityTypeManager
->getViewBuilder($link
->getEntityTypeId())
->view($link, 'default');
if (!empty($item['below'])) {
$this
->addItemContent($item['below']);
}
}
}
}
Classes
Name |
Description |
MenuLinkTree |
Implements the loading, transforming and rendering of menu link trees. |