ept_core-1.4.2/ept_core.module

ept_core.module
<?php

/**
 * @file
 * EPT Core module file.
 */

use Drupal\Core\Entity\EntityInterface;
use Drupal\paragraphs\ParagraphInterface;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Routing\RouteMatchInterface;

/**
 * Implements hook_help().
 */
function ept_core_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    // Main module help for the ept_core module.
    case 'help.page.ept_core':
      $output = '';
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('EPT modules provide ability to add paragraphs in few clicks. You can install separate paragraph types from this bunch of EPT modules:') . '</p>';
      $output .= '<ul>';
      $output .= '<li>' . t('<a href="@ept_accordion@">EPT Accordion / FAQ</a>', ['@ept_accordion@' => 'https://www.drupal.org/project/ept_accordion']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_basic_button@">EPT Bootstrap Button</a>', ['@ept_basic_button@' => 'https://www.drupal.org/project/ept_basic_button']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_bootstrap_button@">EPT Bootstrap Button</a>', ['@ept_bootstrap_button@' => 'https://www.drupal.org/project/ept_bootstrap_button']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_cta@">EPT Call to Action</a>', ['@ept_cta@' => 'https://www.drupal.org/project/ept_cta']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_carousel@">EPT Carousel</a>', ['@ept_carousel@' => 'https://www.drupal.org/project/ept_carousel']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_counter@">EPT Counter</a>', ['@ept_counter@' => 'https://www.drupal.org/project/ept_counter']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_image_gallery@">EPT Image Gallery</a>', ['@ept_image_gallery@' => 'https://www.drupal.org/project/ept_image_gallery']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_micromodal@">EPT Micromodal</a>', ['@ept_micromodal@' => 'https://www.drupal.org/project/ept_micromodal']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_quote@">EPT Quote</a>', ['@ept_quote@' => 'https://www.drupal.org/project/ept_quote']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_slick_slider@">EPT Slick Slider</a>', ['@ept_slick_slider@' => 'https://www.drupal.org/project/ept_slick_slider']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_slideshow@">EPT Slideshow</a>', ['@ept_slideshow@' => 'https://www.drupal.org/project/ept_slideshow']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_stats@">EPT Stats</a>', ['@ept_stats@' => 'https://www.drupal.org/project/ept_stats']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_tabs@">EPT Tabs</a>', ['@ept_tabs@' => 'https://www.drupal.org/project/ept_tabs']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_text@">EPT Text</a>', ['@ept_text@' => 'https://www.drupal.org/project/ept_text']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_timeline@">EPT Timeline</a>', ['@ept_timeline@' => 'https://www.drupal.org/project/ept_timeline']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_webform@">EPT Webform<</a>', ['@ept_webform@' => 'https://www.drupal.org/project/ept_webform']) . '</li>';
      $output .= '<li>' . t('<a href="@ept_webform_popup@">EPT Webform Popup</a>', ['@ept_webform_popup@' => 'https://www.drupal.org/project/ept_webform_popup']) . '</li>';
      $output .= '</ul>';
      $output .= '<h3>' . t('How to use (configuration)') . '</h3>';
      $output .= '<ul>';
      $output .= '<li>' . t('EPT Core has configuration form with Primary/Secondary colors and Mobile/Tablet/Desktop breakpoints') . '</li>';
      $output .= '<li>' . t('The settings is available at: Administration » Configuration » Content authoring » Extra Paragraph Types (EPT) settings') . '</li>';
      $output .= '<li>' . t('These configs will be applied to other EPT paragraphs by default.') . '</li>';
      $output .= '</ul>';
      $output .= '<h3>' . t('External Documentation') . '</h3>';
      $output .= '<p>' . t('You can also view the EPT documentation at Drupal Book: <a href="@drupalbook_external_documentation@">@drupalbook_external_documentation@</a>', [
        '@drupalbook_external_documentation@' => 'https://drupalbook.org/ept',
      ]) . '</p>';
      return $output;
  }
}

/**
 * Implements hook_theme_registry_alter().
 */
function ept_core_theme_registry_alter(&$theme_registry) {
  $module_list = \Drupal::service('extension.list.module')->getList();
  $ept_modules = [];
  foreach ($module_list as $module_name => $extention) {
    if ($module_name == 'ept_core') {
      continue;
    }

    if (strpos($module_name, 'ept_') === 0 && !empty($extention->status)) {
      $ept_modules[] = $module_name;
    }
  }

  $base_theme = 'paragraph';
  foreach ($ept_modules as $ept_module) {
    $ept_module_with_dashes = str_replace('_', '-', $ept_module);
    $module_handler = \Drupal::service('module_handler');
    if ($module_handler->moduleExists('paragraphs')) {
      $module_path = \Drupal::service('extension.list.module')->getPath($ept_module);
      $theme_registry['paragraph__' . $ept_module . '__default'] = [
        'path' => $module_path . '/templates',
        'template' => 'paragraph--' . $ept_module_with_dashes . '--default',
        'render element' => $theme_registry[$base_theme]['render element'],
        'base hook' => $base_theme,
        'type' => 'module',
        'theme path' => $module_path,
        'preprocess functions' => $theme_registry[$base_theme]['preprocess functions'],
      ];
    }
  }
}

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function ept_core_theme_suggestions_paragraph_alter(array &$suggestions, array $variables) {
  // Adds template suggestions for Paragraph types.
  $content = $variables['elements'];
  if (isset($content['#paragraph']) && $content['#paragraph'] instanceof ParagraphInterface) {
    // Add 'paragraph--PARAGRAPH-TYPE.html.twig'.
    if (!in_array('paragraph__' . $content['#paragraph']->bundle(), $suggestions)) {
      $paragraph_type_suggestions[] = 'paragraph__' . $content['#paragraph']->bundle();
    }
    // Add 'paragraph--PARAGRAPH-TYPE--custom.html.twig'.
    $paragraph_type_suggestions[] = 'paragraph__' . $content['#paragraph']->bundle() . '__custom';

    // Add 'paragraph--PARAGRAPH-TYPE--VIEW-MODE.html.twig'.
    if (!in_array('paragraph__' . $content['#paragraph']->bundle() . '__' . $content['#view_mode'], $suggestions)) {
      $paragraph_type_suggestions[] = 'paragraph__' . $content['#paragraph']->bundle() . '__' . $content['#view_mode'];
    }
    // Add 'paragraph--PARAGRAPH-TYPE--VIEW-MODE--custom.html.twig'.
    $paragraph_type_suggestions[] = 'paragraph__' . $content['#paragraph']->bundle() . '__' . $content['#view_mode'] . '__custom';

    // Because paragraph exists twice in $suggestions,
    // the suggestion arrays are reversed for further processing.
    $suggestions_rev = array_reverse($suggestions);
    $paragraph_type_suggestions = array_reverse($paragraph_type_suggestions);

    // Insert the paragraph type and view mode suggestions between
    // paragraph and the paragraph instance-specific suggestions.
    $index = array_search('paragraph', $suggestions_rev);
    if (is_numeric($index)) {
      array_splice($suggestions_rev, $index, 0, $paragraph_type_suggestions);
      $suggestions = array_reverse($suggestions_rev);
      return;
    }
    // If paragraph isn't present as a suggestion.
    $suggestions_rev = array_merge($paragraph_type_suggestions, $suggestions_rev);
    $suggestions = array_reverse($suggestions_rev);
  }
}

/**
 * Implements hook_theme().
 */
function ept_core_theme() {
  return [
    'ept_settings_default' => [
      'variables' => ['ept_settings' => NULL],
      'template' => 'ept-settings-default',
    ],
  ];
}

/**
 * Implements hook_preprocess_paragraph().
 */
function ept_core_preprocess_paragraph(&$variables) {
  if (empty($variables['elements']['#paragraph']) ||
    strpos($variables['elements']['#paragraph']->bundle(), 'ept_') !== 0) {
    return;
  }
  if (empty($variables['content']['field_ept_settings'])) {
    return;
  }

  $service = \Drupal::service('ept_core.generate_css');
  $ept_settings = $variables['elements']['#paragraph']->field_ept_settings->getValue();
  if (empty($ept_settings[0]['ept_settings']['design_options'])) {
    return;
  }

  $paragraph_class = 'paragraph-id-' . $variables['elements']['#paragraph']->id();

  $variables['styles'] = $service->generateFromSettings($ept_settings[0]['ept_settings']['design_options'], $paragraph_class);

  $service = \Drupal::service('ept_core.generate_js');
  $javascript_data = $service->generateFromSettings($ept_settings[0]['ept_settings']['design_options']);
  if (!empty($javascript_data)) {
    if (!empty($javascript_data['eptCoreParallax'])) {
      $variables['#attached']['library'][] = 'ept_core/parallax';
    }
    if (!empty($javascript_data['eptCoreBackgroundRemoteVideo'])) {
      $variables['#attached']['library'][] = 'ept_core/jquery_mb_ytplayer';
    }
    $variables['#attached']['drupalSettings']['eptCore'][$paragraph_class] = $javascript_data;
  }

  if (!empty($ept_settings['0']['ept_settings']['design_options']['other_settings']['edge_to_edge'])) {
    $variables['attributes']['class'][] = 'ept-edge-to-edge';
  }

  if (!empty($ept_settings['0']['ept_settings']['design_options']['other_settings']['container_width'])) {
    $variables['attributes']['class'][] = 'ept-width-' . $ept_settings['0']['ept_settings']['design_options']['other_settings']['container_width'];
  }
}

/**
 * Implements hook_ENTITY_TYPE_view().
 */
function ept_core_paragraph_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
  if (strpos($entity->bundle(), 'ept_') !== 0) {
    return;
  }
  $bundle = _ept_core_underscore_to_camel_case($entity->bundle());

  // Use Paragraph ID for template css/javascript.
  /** @var \Drupal\paragraphs\Entity\Paragraph $entity */
  $paragraph_id = $entity->id();
  if (!empty($entity->field_ept_settings)) {
    $options = $entity->get('field_ept_settings')->getValue();
    $options = !empty($options[0]['ept_settings']) ? $options[0]['ept_settings'] : [];
  }
  else {
    $options = [];
  }

  if (empty($options) || (isset($options['pass_options_to_javascript']) &&
      $options['pass_options_to_javascript'] === FALSE)) {
    return;
  }

  $paragraph_options = [
    'paragraphClass' => 'paragraph-id-' . $paragraph_id,
    'options' => $options,
  ];
  $build['#attached']['drupalSettings'][$bundle]['paragraph-id-' . $paragraph_id] = $paragraph_options;
}

/**
 * Helper function to convert ept_name paragraph bundle to eptName camelcase.
 */
function _ept_core_underscore_to_camel_case($string) {
  $str = str_replace(' ', '', ucwords(str_replace('_', ' ', $string)));
  $str[0] = strtolower($str[0]);
  return $str;
}

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

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