public function RenderCheeseburgerMenuBlock::renderTree in Cheeseburger Menu 8.3
Same name and namespace in other branches
- 8.4 src/Controller/RenderCheeseburgerMenuBlock.php \Drupal\cheeseburger_menu\Controller\RenderCheeseburgerMenuBlock::renderTree()
- 8.2 src/Controller/RenderCheeseburgerMenuBlock.php \Drupal\cheeseburger_menu\Controller\RenderCheeseburgerMenuBlock::renderTree()
Render given tree.
1 call to RenderCheeseburgerMenuBlock::renderTree()
- RenderCheeseburgerMenuBlock::content in src/
Controller/ RenderCheeseburgerMenuBlock.php
File
- src/
Controller/ RenderCheeseburgerMenuBlock.php, line 115 - Controller used for rendering block.
Class
- RenderCheeseburgerMenuBlock
- Class RenderCheeseburgerMenuBlock.
Namespace
Drupal\cheeseburger_menu\ControllerCode
public function renderTree($route_id, $page_type, $current_route, $config) {
$menus_appear = isset($config['menus_appear']) ? $config['menus_appear'] : [];
$menus_weight = isset($config['menus_weight']) ? $config['menus_weight'] : [];
$menus_title = isset($config['menus_title']) ? $config['menus_title'] : [];
$taxonomy_appear = isset($config['taxonomy_appear']) ? $config['taxonomy_appear'] : [];
$taxonomy_weight = isset($config['taxonomy_weight']) ? $config['taxonomy_weight'] : [];
$taxonomy_title = isset($config['taxonomy_title']) ? $config['taxonomy_title'] : [];
$cart = [];
$cart['appear'] = isset($config['cart_appear']) ? $config['cart_appear'] : FALSE;
$cart['weight'] = isset($config['cart_weight']) ? $config['cart_weight'] : 0;
$phone['appear'] = isset($config['phone_appear']) ? $config['phone_appear'] : FALSE;
$phone['weight'] = isset($config['phone_weight']) ? $config['phone_weight'] : 0;
$phone['store'] = isset($config['phone_store']) ? $config['phone_store'] : FALSE;
$phone['number'] = isset($config['phone_number']) ? $config['phone_number'] : '';
$language_switcher = isset($config['lang_switcher']) ? $config['lang_switcher'] : FALSE;
$language_switcher_weight = isset($config['lang_switcher_weight']) ? $config['lang_switcher_weight'] : 0;
$headerHeight = isset($config['headerHeight']) ? $config['headerHeight'] : 0;
$headerPadding = isset($config['headerPadding']) ? $config['headerPadding'] : 0;
$moduleHandler = $this
->moduleHandler();
$menu_ids = $this
->getAllMenuLinkId();
$taxonomy_term_ids = $this
->getAllTaxonomyTermIds();
$langcode = $this
->languageManager()
->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
->getId();
$complete_menu_tree = [];
$tree = [];
$titles = [];
foreach ($menus_appear as $key => $menu) {
$helpArray = [];
if ($menus_title[$key] === TRUE || $menus_title[$key] === FALSE) {
$helpArray['title'] = array_search($key, $menu_ids);
}
else {
$helpArray['title'] = new TranslatableMarkup($menus_title[$key], [], [], $this
->getStringTranslation());
}
$helpArray['class'] = $key;
$helpArray['weight'] = $menus_weight[$key];
$titles[] = $helpArray;
}
foreach ($taxonomy_appear as $key => $taxonomy) {
$helpArray = [];
if ($taxonomy_title[$key] === TRUE || $taxonomy_title[$key] === FALSE) {
$helpArray['title'] = array_search($key, $taxonomy_term_ids);
}
else {
$helpArray['title'] = new TranslatableMarkup($taxonomy_title[$key], [], [], $this
->getStringTranslation());
}
$helpArray['class'] = $key;
$helpArray['weight'] = $taxonomy_weight[$key];
$titles[] = $helpArray;
}
if ($cart['appear']) {
$helpArray = [];
$helpArray['title'] = $this
->t('Cart');
$helpArray['class'] = 'cart';
$helpArray['url'] = '/cart';
$helpArray['weight'] = $cart['weight'];
$titles[] = $helpArray;
}
if ($phone['appear']) {
if ($phone['store'] == 0) {
$phone_number = $phone['number'];
}
else {
if ($moduleHandler
->moduleExists('commerce_store')) {
$store = Store::load($phone['store']);
if (!empty($store) && $store
->hasField('field_phone')) {
$phone_number = current($store
->get('field_phone')
->getValue())['value'];
$phone_number = str_replace(' ', '', $phone_number);
if (empty($phone_number)) {
$phone_number = FALSE;
}
}
else {
$phone_number = FALSE;
}
}
else {
$phone_number = FALSE;
}
}
if ($phone_number != FALSE) {
$helpArray = [];
$helpArray['title'] = $this
->t('Phone');
$helpArray['class'] = 'phone';
$helpArray['url'] = 'tel:' . $phone_number;
$helpArray['weight'] = $phone['weight'];
$titles[] = $helpArray;
}
}
$titles = $this
->bubbleSortWeight($titles);
$tree[] = [
'#theme' => 'hierarchical_navigation',
'#tree' => $titles,
];
$tree[] = [
'#markup' => '<div class="cheeseburger-menu__menus">',
];
$trees = [];
// MENUS.
foreach ($menus_appear as $key => $menu) {
if ($menus_title[$key] === TRUE) {
$title = array_search($key, $menu_ids);
}
elseif ($menus_title[$key] === FALSE) {
$title = FALSE;
}
else {
$title = $menus_title[$key];
}
$menu_tree = $this
->getMenuTree($key);
$complete_menu_tree[] = $menu_tree;
$trees[] = [
'#theme' => 'hierarchical_menu',
'#menu_tree' => $menu_tree,
'#route_id' => $route_id,
'#page_type' => $page_type,
'#title' => $title,
'#machine_name' => $key,
'#current_url' => $current_route,
'#cache' => [
'max-age' => 0,
],
'#attached' => [
'library' => [
'cheeseburger_menu/cheeseburger_menu',
],
'drupalSettings' => [
'collapsibleMenu' => 1,
'interactiveParentMenu' => 0,
'headerHeight' => $headerHeight,
'headerPadding' => $headerPadding,
'breakpoints' => $config['breakpoints'],
'activeBreakpoints' => [],
],
],
'weight' => $menus_weight[$key],
];
}
// Taxonomies.
foreach ($taxonomy_appear as $key => $taxonomy) {
if ($taxonomy_title[$key] === TRUE) {
$title = array_search($key, $taxonomy_term_ids);
}
elseif ($taxonomy_title[$key] === FALSE) {
$title = FALSE;
}
else {
$title = $taxonomy_title[$key];
}
$entityTypeManager = $this
->entityTypeManager();
$vocabulary_tree = $entityTypeManager
->getStorage('taxonomy_term')
->loadTree($key);
$vocabulary_tree_array = [];
foreach ($vocabulary_tree as $item) {
$term_storage = $this
->entityTypeManager()
->getStorage('taxonomy_term');
/** @var \Drupal\taxonomy\Entity\Term $term */
$term = $term_storage
->load($item->tid);
if ($term
->hasField('field_icon')) {
$icon = $term
->get('field_icon');
if (!empty($icon
->getValue())) {
$icon = $term
->get('field_icon')->entity
->getFileUri();
$icon = file_create_url($icon);
}
else {
$icon = '';
}
}
else {
$icon = '';
}
$translation_languages = $term
->getTranslationLanguages();
if (array_key_exists($langcode, $translation_languages)) {
$translation = $term
->getTranslation($langcode);
}
else {
$translation = $term;
}
$vocabulary_tree_array[] = [
'id' => $item->tid,
'name' => $translation
->getName(),
'url' => $term
->url(),
'parents' => $item->parents,
'interactive_parent' => 1,
'type' => 'taxonomy_term',
'icon' => $icon,
];
}
$vocabulary_tree = $this
->generateTree($vocabulary_tree_array);
$complete_menu_tree[] = $vocabulary_tree;
$trees[] = [
'#theme' => 'hierarchical_menu',
'#menu_tree' => $vocabulary_tree,
'#route_id' => $route_id,
'#page_type' => $page_type,
'#title' => $title,
'#machine_name' => $key,
'#current_url' => $current_route,
'#cache' => [
'max-age' => 0,
],
'#attached' => [
'library' => [
'cheeseburger_menu/cheeseburger_menu',
],
'drupalSettings' => [
'collapsibleMenu' => 1,
'interactiveParentMenu' => 0,
'headerHeight' => $headerHeight,
'headerPadding' => $headerPadding,
'breakpoints' => $config['breakpoints'],
'activeBreakpoints' => [],
],
],
'weight' => $taxonomy_weight[$key],
];
}
if ($language_switcher == 1) {
/** @var Drupal\Core\Language\LanguageManager $languageManager */
$languageManager = $this
->languageManager();
$current_language = $languageManager
->getCurrentLanguage()
->getId();
$languageTree = [];
$languages = $languageManager
->getLanguages();
foreach ($languages as $language) {
$languageTree[] = [
'name' => $language
->getName(),
'id' => $language
->getId(),
'url' => $language
->isDefault() ? '/' : '/' . $language
->getId(),
'type' => 'language',
];
}
$complete_menu_tree[] = $languageTree;
$title = $this
->t('Language');
$trees[] = [
'#theme' => 'hierarchical_menu',
'#menu_tree' => $languageTree,
'#route_id' => $current_language,
'#page_type' => 'language',
'#title' => $title,
'#machine_name' => 'language_switcher',
'#current_url' => $current_route,
'#cache' => [
'max-age' => 0,
],
'#attached' => [
'library' => [
'cheeseburger_menu/cheeseburger_menu',
],
'drupalSettings' => [
'collapsibleMenu' => 1,
'interactiveParentMenu' => 0,
'headerHeight' => $headerHeight,
'headerPadding' => $headerPadding,
'breakpoints' => $config['breakpoints'],
'activeBreakpoints' => [],
],
],
'weight' => $language_switcher_weight,
];
}
$active_child = $this
->findActiveChild($complete_menu_tree, $route_id, $current_route, $page_type);
$trees = $this
->bubbleSortWeight($trees);
foreach ($trees as $key => $iterator) {
$trees[$key]['#active'] = $active_child;
unset($trees[$key]['weight']);
}
$tree = array_merge($tree, $trees);
$tree[] = [
'#markup' => '</div>',
];
return $tree;
}