ultimenu-8.x-2.x-dev/ultimenu.theme.inc

ultimenu.theme.inc
<?php

/**
 * @file
 * Preprocessors and theme functions of Ultimenu module.
 */

use Drupal\Core\Template\Attribute;

/**
 * Prepares variables for ultimenu templates.
 *
 * Default template: ultimenu.html.twig.
 *
 * @param array $variables
 *   An associative array containing:
 *   - element: An associative array containing the properties of the element.
 *     Properties used: #config, #items, #plugin_id, #attributes.
 *     - config: The available config related to this particular instance.
 *     - items: An array of available items.
 *     - attributes: An associative array of attributes to be placed in the UL
 *       tag.
 *
 * @see ultimenu.html.twig
 */
function template_preprocess_ultimenu(array &$variables) {
  $element = $variables['element'];
  foreach (['config', 'items'] as $key) {
    $variables[$key] = $element["#$key"] ?? [];
  }

  $config = $variables['config'];
  $goodies = ultimenu()->getSetting('goodies');
  $name = $config['menu_name'];

  $variables['goodies'] = $goodies;
  $variables['attributes'] = new Attribute();
  $variables['attributes']['id'] = 'ultimenu-' . $name;
  $variables['attributes']['data-ultimenu'] = $name;

  if (!empty($config['ajaxify'])) {
    $variables['attributes']['data-ultiajax'] = TRUE;
  }

  $classes = $variables['attributes']['class'] ?? [];
  $main = $name == 'main' && empty($goodies['decouple-main-menu']);
  // @todo remove $main anytime later.
  if ($main || !empty($config['offcanvas'])) {
    $classes[] = 'ultimenu--offcanvas';
  }

  // States classes, gone at mobile devices.
  if (empty($config['hamburger'])) {
    $classes[] = 'is-ultihover';

    // Mobile has always carets, this is for desktop to repalce :hover by caret.
    if (!empty($config['caret'])) {
      $classes[] = 'is-ulticaret';
    }
  }

  if ($caret = $config['caret_skin'] ?? NULL) {
    $classes[] = 'is-ulticaret--' . $caret;
  }

  $variables['attributes']['class'] = array_merge(['ultimenu'], $classes);
}

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

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