zurb_foundation-8.x-6.0-alpha5/inc/menu.inc

inc/menu.inc
<?php

use Drupal\Core\Link;

/**
 * Implements theme_menu_local_tasks().
 */
function zurb_foundation_menu_local_tasks(&$variables) {
  $output = '';

  if (!empty($variables['primary'])) {
    $variables['primary']['#prefix'] = '<h2 class="visually-hidden">' . t('Primary tabs') . '</h2>';
    $variables['primary']['#prefix'] .= '<div class="button-group">';
    $variables['primary']['#suffix'] = '</div>';
    $output .= \Drupal::service('renderer')->render($variables['primary']);
  }
  if (!empty($variables['secondary'])) {
    $variables['secondary']['#prefix'] = '<h2 class="visually-hidden">' . t('Secondary tabs') . '</h2>';
    $variables['secondary']['#prefix'] .= '<div class="button-group">';
    $variables['secondary']['#suffix'] = '</div>';
    $output .= \Drupal::service('renderer')->render($variables['secondary']);
  }

  return $output;
}

/**
 * Implements theme_preprocess_menu_local_task().
 */
function zurb_foundation_preprocess_menu_local_task(&$variables) {
  $link = $variables['element']['#link'];
  $link_text = [
    '#markup' => $link['title'],
  ];

  if (!empty($variables['element']['#active'])) {
    // Add text to indicate active tab for non-visual users.
    $link_text['#suffix'] = '<span class="visually-hidden">' . t('(active tab)') . '</span>';
  }

  $state = !empty($variables['element']['#active']) ? 'active' : 'secondary';
  $link['url']->setOption('attributes', ['class' => ['button', $state]]);
}

/**
 * Implements theme_preprocess_menu__off_canvas().
 *
 * Adds the appropriate submenu class to off canvas menus.
 */
function zurb_foundation_preprocess_menu__off_canvas(&$variables) {
  $blocks = \Drupal::service('block.repository')->getVisibleBlocksPerRegion();
  foreach (['left', 'right'] as $direction) {
    if (!empty($blocks[$direction . '_off_canvas'])) {
      foreach ($blocks[$direction . '_off_canvas'] as $block) {
        $plugin = $block->getPlugin();
        if ($plugin->getBaseId() == 'system_menu_block') {
          $menu_name = str_replace('-', '_', $plugin->getDerivativeId());
          if ($variables['theme_hook_original'] == 'menu__' . $menu_name) {
            $variables['attributes']['class'][] = $direction . '-submenu';
            break;
          }
        }
      }
    }
  }
}

/**
 * Implements theme_preprocess_menu().
 */
function zurb_foundation_preprocess_menu(&$variables) {
  $variables['attributes']['class'][] = 'menu';
}

/**
 * Implements theme_preprocess_menu__MENU_NAME().
 */
function zurb_foundation_preprocess_menu__main(&$variables) {
  if ($variables['top_bar'] = theme_get_setting('zurb_foundation_top_bar_enable')) {
    $top_bar_attributes = new \Drupal\Core\Template\Attribute();

    if (theme_get_setting('zurb_foundation_top_bar_grid')) {
      $top_bar_attributes->addClass('row column');
    }

    if (theme_get_setting('zurb_foundation_top_bar_sticky')) {
      $top_bar_attributes->addClass('sticky', 'large-12');
      $top_bar_attributes->setAttribute('data-sticky', TRUE);
      $top_bar_attributes->setAttribute('data-top-anchor', 'top-bar-sticky-container');
      // 9999999(px) is used as no other bottom anchor stopped the top-bar from
      // jumping back to the top of the screen after scrolling past 50% of the
      // screen. Super silly, but hours of work led to this.
      $top_bar_attributes->setAttribute('data-btm-anchor', 9999999);
      $top_bar_attributes->setAttribute('data-margin-top', 0);
      $top_bar_attributes->setAttribute('data-margin-bottom', 0);
      $top_bar_attributes->setAttribute('data-options', 'stickyOn:small');
      $variables['top_bar_sticky'] = TRUE;
    }

    if ($variables['top_bar'] == 2) {
      $top_bar_attributes->addClass('show-for-small');
    }

    $variables['top_bar_attributes'] = $top_bar_attributes;
    $variables['top_bar_menu_text'] = theme_get_setting('zurb_foundation_top_bar_menu_text');


    if ($back_text = theme_get_setting('zurb_foundation_top_bar_back_text')) {
      $variables['attributes']['data-back-button'] = "<li class=\"js-drilldown-back\"><a>{$back_text}</a></li>";
    }

    if (!theme_get_setting('zurb_foundation_top_bar_is_hover')) {
      $variables['attributes']['data-disable-hover'] = 'true';
    }

    // Format the linked site name.
    $site_name = \Drupal::config('system.site')->get('name');
    $title = strip_tags($site_name) . ' ' . t('Home');
    $url = \Drupal\Core\Url::fromRoute('<front>');
    $url->setOption('attributes', ['title' => $title]);

    $variables['linked_site_name'] = '';
    if (!empty($variables['site_name'])) {
      $variables['linked_site_name'] = Link::fromTextAndUrl($variables['site_name'], $url)->toString();
    }

    $variables['site_name'] = Link::fromTextAndUrl($site_name, $url)->toString();

    // Embed the search form inside the Top Bar.
    if (theme_get_setting('zurb_foundation_top_bar_search')) {
      if (\Drupal::moduleHandler()->moduleExists('search')) {
        $search_form = \Drupal::formBuilder()
          ->getForm('Drupal\search\Form\SearchBlockForm');

        // Wrap the search form in proper Top Bar classes.
        $search_form['#prefix'] = '<ul class="right"><li class="has-form">';
        $search_form['#suffix'] = '</ul></li>';

        $variables['top_bar_search'] = $search_form;
      }
    }

    // Embed the Language switcher inside the Top Bar.
    if (\Drupal::moduleHandler()->moduleExists('language')) {
      if (theme_get_setting('zurb_foundation_top_bar_languageswitcher')) {
        /** @var \Drupal\Core\Block\BlockManager $block_plugin_manager */
        $block_plugin_manager = \Drupal::service('plugin.manager.block');
        /** @var \Drupal\language\Plugin\Block\LanguageBlock $language_block */
        $language_block = $block_plugin_manager->createInstance('language_block:language_interface', []);
        $variables['top_bar_languageswitcher'] = $language_block->build();
      }
    }
  }
}

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

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