bootstrap_components_toolkit-1.0.0/modules/bootstrap_components_toolkit_views_accordion/bootstrap_components_toolkit_views_accordion.module

modules/bootstrap_components_toolkit_views_accordion/bootstrap_components_toolkit_views_accordion.module
<?php

/**
 * @file
 * Primary module hooks for Boostrap components toolkit module.
 */

use Drupal\Component\Utility\Html;

/**
 * Prepares variables for views_style_bct_accordion.html.twig template.
 */
function template_preprocess_views_style_bct_accordion(&$variables) {
  $view = $variables['view'];
  $variables['id'] = Html::getUniqueId('bct-accordion-' . $view->storage->id() . '-' . $view->current_display . '-' . rand(10, 99));
  $variables['options'] = $view->style_plugin->options;

  // Set wrapper classes.
  if ($view->style_plugin->options['wrapper_class']) {
    $wrapper_class = explode(' ', $view->style_plugin->options['wrapper_class']);
    $variables['attributes']['class'] = array_map('\Drupal\Component\Utility\Html::cleanCssIdentifier', $wrapper_class);
  }

  // Group results by field.
  $panel_title_field = $view->style_plugin->options['panel_title_field'];
  if ($panel_title_field) {
    foreach ($variables['rows'] as $id => $row) {
      $row_id = Html::cleanCssIdentifier(strtolower(trim(strip_tags($view->style_plugin->getField($id, $panel_title_field)))));

      if (!isset($variables['rows'][$row_id])) {
        $variables['rows'][$row_id] = [];
        $variables['rows'][$row_id]['parent_id'] = $variables['id'];
        $variables['rows'][$row_id]['item_id'] = $row_id . '-' . rand(1, 1000);
        $variables['rows'][$row_id]['header_tag'] = $variables['options']['header_html_tag'];
        $variables['rows'][$row_id]['is_open'] = FALSE;
        $variables['rows'][$row_id]['always_open'] = $variables['options']['always_open'];
        $variables['rows'][$row_id]['header_text'] = $view->style_plugin->getField($id, $panel_title_field);
      }

      $variables['rows'][$row_id]['body_content'][$id] = $row;
      unset($variables['rows'][$id]);
    }

    // Set open/close accordion items.
    $results = count($variables['rows']);
    if ($results > 0 && isset($view->style_plugin->options['collapse']['first']) && $view->style_plugin->options['collapse']['first'] > 0) {
      $variables['rows'][array_key_first($variables['rows'])]['is_open'] = TRUE;
    }
    if ($results > 1 && isset($view->style_plugin->options['collapse']['last']) && $view->style_plugin->options['collapse']['last'] > 0) {
      $variables['rows'][array_key_last($variables['rows'])]['is_open'] = TRUE;
    }
    if ($results > 2 && isset($view->style_plugin->options['collapse']['middle']) && $view->style_plugin->options['collapse']['middle'] > 0) {
      $row_keys = array_keys(array_slice($variables['rows'], 1, -1));

      foreach ($row_keys as $key) {
        $variables['rows'][$key]['is_open'] = TRUE;
      }
    }
  }
}

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

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