menu_item_fields-8.x-1.5/menu_item_fields.module

menu_item_fields.module
<?php

/**
 * @file
 * Contains hooks for the Menu Item Fields module.
 */

use Drupal\menu_item_fields\Render\Callback;

/**
 * Implements hook_preprocess_menu().
 *
 * Render menu_link_content entities in the menu tree recursively.
 */
function menu_item_fields_preprocess_menu(&$variables) {
  $menu_link_content_prefix = 'menu_link_content:';
  $viewBuilder = \Drupal::entityTypeManager()
    ->getViewBuilder('menu_link_content');
  $entityRepository = \Drupal::service('entity.repository');
  $viewDisplayStorage = \Drupal::entityTypeManager()->getStorage('entity_view_display');

  foreach ($variables['items'] as $itemId => &$item) {
    // Recursively preprocess the items below.
    if ($item['below']) {
      $below_variables = [
        'items' => $item['below'],
        'view_mode' => $variables['view_mode'] ?? '',
        'view_mode_override_field' => $variables['view_mode_override_field'] ?? '',
      ];
      menu_item_fields_preprocess_menu($below_variables);
      $item['below'] = $below_variables['items'];
    }

    if (!str_starts_with($itemId, $menu_link_content_prefix)) {
      continue;
    }

    $uuid = substr($itemId, strlen($menu_link_content_prefix));
    $menuLinkContent = $entityRepository->loadEntityByUuid('menu_link_content', $uuid);

    // Override the view mode with a field value.
    $viewMode = $variables['view_mode'] ?? 'default';
    if ($variables['view_mode_override_field'] ?? '') {
      $viewModeValue = $menuLinkContent->get($variables['view_mode_override_field'])->getString();
      if ($viewModeValue && $viewDisplayStorage->load('menu_link_content.' . $menuLinkContent->bundle() . '.' . $viewModeValue)) {
        $viewMode = $viewModeValue;
      }
    }

    $content = $viewBuilder->view($menuLinkContent, $viewMode);
    $content['#menu_item'] = $item;
    $content['#pre_render'][] = [Callback::class, 'preRenderMenuLinkContent'];

    $item['content'] = $content;
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc