fences-8.x-2.0-rc1/fences.module

fences.module
<?php

/**
 * @file
 * Alter wrapping markup of fields.
 */

use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FormatterInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Template\Attribute;
use Drupal\fences\FencesConstants;
use Drupal\fences\TagManagerInterface;

/**
 * Implements hook_theme_registry_alter().
 */
function fences_theme_registry_alter(&$theme_registry) {
  // Get the configuration.
  $config = \Drupal::config('fences.settings');

  // Allow to override the field template only if it came from core or
  // allow to override the field template for all themes.
  if (!empty($config->get('fences_field_template_override_all_themes')) || (strpos($theme_registry['field']['path'], 'core') === 0)) {
    $module_path = \Drupal::service('extension.list.module')->getPath('fences');
    $theme_registry['field']['path'] = $module_path . '/templates';
  }
}

/**
 * Implements hook_field_formatter_third_party_settings_form().
 */
function fences_field_formatter_third_party_settings_form(FormatterInterface $plugin, FieldDefinitionInterface $field_definition, $view_mode, $form, FormStateInterface $form_state) {
  if (!(\Drupal::currentUser()->hasPermission('edit fences formatter settings'))) {
    // The current user doesn't have permission to edit fences formatter
    // settings:
    return;
  }

  $settings['fences'] = [];

  $invisible_on_none = function ($name) {
    return [
      'invisible' => [
        '[name$="' . $name . ']"]' => [
          'value' => TagManagerInterface::NO_MARKUP_VALUE,
        ],
      ],
    ];
  };

  $defaultSettings = FencesConstants::DEFAULT_THIRD_PARTY_SETTINGS;

  $tag_options = \Drupal::service('fences.tag_manager')->getTagOptions();
  $settings['fences'] = [
    '#type' => 'details',
    '#title' => t('Fences'),
    '#attributes' => ['class' => ['fences-details-wrapper']],
  ];
  $settings['fences']['fences_field_tag'] = [
    '#title' => t('Field Tag'),
    '#type' => 'select',
    '#options' => $tag_options,
    '#default_value' => $plugin->getThirdPartySetting('fences', 'fences_field_tag', $defaultSettings['fences_field_tag']),
    '#attributes' => ['class' => ['fences-field-tag']],
  ];
  $settings['fences']['fences_field_classes'] = [
    '#title' => t('Field Classes'),
    '#type' => 'textfield',
    '#default_value' => $plugin->getThirdPartySetting('fences', 'fences_field_classes', $defaultSettings['fences_field_classes']),
    '#states' => $invisible_on_none('fences_field_tag'),
    // Remove default maxlength of 128:
    '#maxlength' => NULL,
    '#attributes' => ['class' => ['fences-field-classes']],
    '#description' => t('Enter additional classes, separated by space.'),
  ];
  $settings['fences']['fences_field_items_wrapper_tag'] = [
    '#title' => t('Field Items Wrapper Tag'),
    '#type' => 'select',
    '#options' => $tag_options,
    '#default_value' => $plugin->getThirdPartySetting('fences', 'fences_field_items_wrapper_tag', $defaultSettings['fences_field_items_wrapper_tag']),
    '#attributes' => ['class' => ['fences-field-items-wrapper-tag']],
  ];
  $settings['fences']['fences_field_items_wrapper_classes'] = [
    '#title' => t('Field Items Wrapper Classes'),
    '#type' => 'textfield',
    '#default_value' => $plugin->getThirdPartySetting('fences', 'fences_field_items_wrapper_classes', $defaultSettings['fences_field_items_wrapper_classes']),
    '#states' => $invisible_on_none('fences_field_items_wrapper_tag'),
    // Remove default maxlength of 128:
    '#maxlength' => NULL,
    '#attributes' => ['class' => ['fences-field-items-wrapper-classes']],
    '#description' => t('Enter additional classes, separated by space.'),
  ];
  $settings['fences']['fences_field_item_tag'] = [
    '#title' => t('Field Item Tag'),
    '#type' => 'select',
    '#options' => $tag_options,
    '#default_value' => $plugin->getThirdPartySetting('fences', 'fences_field_item_tag', $defaultSettings['fences_field_item_tag']),
    '#attributes' => ['class' => ['fences-field-item-tag']],
  ];
  $settings['fences']['fences_field_item_classes'] = [
    '#title' => t('Field Item Classes'),
    '#type' => 'textfield',
    '#default_value' => $plugin->getThirdPartySetting('fences', 'fences_field_item_classes', $defaultSettings['fences_field_item_classes']),
    '#states' => $invisible_on_none('fences_field_item_tag'),
    // Remove default maxlength of 128:
    '#maxlength' => NULL,
    '#attributes' => ['class' => ['fences-field-item-classes']],
    '#description' => t('Enter additional classes, separated by space.'),
  ];
  $settings['fences']['fences_label_tag'] = [
    '#title' => t('Label Tag'),
    '#type' => 'select',
    '#options' => $tag_options,
    '#default_value' => $plugin->getThirdPartySetting('fences', 'fences_label_tag', $defaultSettings['fences_label_tag']),
    '#attributes' => ['class' => ['fences-label-tag']],
  ];
  $settings['fences']['fences_label_classes'] = [
    '#title' => t('Label Classes'),
    '#type' => 'textfield',
    '#default_value' => $plugin->getThirdPartySetting('fences', 'fences_label_classes', $defaultSettings['fences_label_classes']),
    '#states' => $invisible_on_none('fences_label_tag'),
    // Remove default maxlength of 128:
    '#maxlength' => NULL,
    '#attributes' => ['class' => ['fences-label-classes']],
    '#description' => t('Enter additional classes, separated by space.'),
  ];
  \Drupal::moduleHandler()->alter('fences_field_formatter_third_party_settings_form', $settings);

  return $settings['fences'];
}

/**
 * Implements hook_preprocess_field().
 */
function fences_preprocess_field(&$vars) {
  // Default to showing all markup.
  $vars['display_label_tag'] = TRUE;
  $vars['display_field_tag'] = TRUE;
  $vars['display_items_wrapper_tag'] = FALSE;
  $vars['display_item_tag'] = TRUE;

  if (isset($vars['element']['#third_party_settings']['fences'])) {
    $fences_config = $vars['element']['#third_party_settings']['fences'];

    $vars['display_label_tag'] = $fences_config['fences_label_tag'] !== TagManagerInterface::NO_MARKUP_VALUE;
    $vars['display_field_tag'] = $fences_config['fences_field_tag'] !== TagManagerInterface::NO_MARKUP_VALUE;
    $vars['display_items_wrapper_tag'] = !empty($fences_config['fences_field_items_wrapper_tag']) && $fences_config['fences_field_items_wrapper_tag'] !== TagManagerInterface::NO_MARKUP_VALUE;
    $vars['display_item_tag'] = $fences_config['fences_field_item_tag'] !== TagManagerInterface::NO_MARKUP_VALUE;

    $vars['label_tag'] = $fences_config['fences_label_tag'];
    $vars['field_tag'] = $fences_config['fences_field_tag'];

    $vars['field_items_wrapper_tag'] = !empty($fences_config['fences_field_items_wrapper_tag']) ? $fences_config['fences_field_items_wrapper_tag'] : NULL;
    $vars['field_item_tag'] = $fences_config['fences_field_item_tag'];

    // Prevent adding empty classes:
    if (!empty($fences_config['fences_field_classes'])) {
      $fences_field_classes = explode(' ', $fences_config['fences_field_classes']);
      foreach ($fences_field_classes as $class) {
        // Add classes from setting:
        $vars['attributes']['class'][] = $class;
      }
    }

    if (!empty($fences_config['fences_label_classes'])) {
      $fences_field_classes = explode(' ', $fences_config['fences_label_classes']);
      foreach ($fences_field_classes as $class) {
        // Add classes from setting:
        $vars['title_attributes']['class'][] = $class;
      }
    }
    if (!empty($fences_config['fences_field_item_classes'])) {
      $fences_field_item_classes = explode(' ', $fences_config['fences_field_item_classes']);
      foreach ($vars['items'] as $field_item) {
        foreach ($fences_field_item_classes as $class) {
          // Add classes from setting:
          $field_item['attributes']->addClass($class);
        }
      }
    }
    $vars['field_items_wrapper_attributes'] = new Attribute();
    if (!empty($fences_config['fences_field_items_wrapper_classes'])) {
      $fences_field_items_wrapper_classes = explode(' ', $fences_config['fences_field_items_wrapper_classes']);
      foreach ($fences_field_items_wrapper_classes as $class) {
        // Add classes from setting:
        $vars['field_items_wrapper_attributes']->addClass($class);
      }
    }
  }
}

/**
 * Implements hook_field_formatter_settings_summary_alter().
 */
function fences_field_formatter_settings_summary_alter(array &$summary, array $context) {
  $fencesSettings = $context['formatter']->getThirdPartySettings('fences');
  if (count($fencesSettings) > 0) {
    $defaultSettings = FencesConstants::DEFAULT_THIRD_PARTY_SETTINGS;
    $summaryItems = [
      'fences_field_tag' => t('Field tag: %field_tag', ['%field_tag' => $fencesSettings['fences_field_tag']]),
      'fences_field_classes' => t('Field classes: %field_classes', ['%field_classes' => $fencesSettings['fences_field_classes']]),
      'fences_field_items_wrapper_tag' => t('Field items wrapper tag: %field_items_wrapper_tag', ['%field_items_wrapper_tag' => $fencesSettings['fences_field_items_wrapper_tag']]),
      'fences_field_items_wrapper_classes' => t('Field items wrapper classes: %field_items_wrapper_classes', ['%field_items_wrapper_classes' => $fencesSettings['fences_field_items_wrapper_classes']]),
      'fences_field_item_tag' => t('Field item tag: %field_item_tag', ['%field_item_tag' => $fencesSettings['fences_field_item_tag']]),
      'fences_field_item_classes' => t('Field item classes: %field_item_classes', ['%field_item_classes' => $fencesSettings['fences_field_item_classes']]),
      'fences_label_tag' => t('Label tag: %label_tag', ['%label_tag' => $fencesSettings['fences_label_tag']]),
      'fences_label_classes' => t('Label classes: %label_classes', ['%label_classes' => $fencesSettings['fences_label_classes']]),
    ];
    foreach ($fencesSettings as $setting => $value) {
      if ($value != $defaultSettings[$setting]) {
        $summary[] = $summaryItems[$setting];
      }
    }
  }
}

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

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