degov-8.x-2.0/modules/degov_paragraph_slideshow/degov_paragraph_slideshow.module

modules/degov_paragraph_slideshow/degov_paragraph_slideshow.module
<?php

use Drupal\degov_common\Common;
use Drupal\Core\Url;

/**
 * Implements hook_preprocess().
 */
function degov_paragraph_slideshow_preprocess(&$variables, $hook, &$info) {
  // Add template suggestions and libraries implemented in this module.
  Common::addThemeSuggestions($variables, $hook, $info, [
    'module_name' => 'degov_paragraph_slideshow',
    'entity_type' => 'paragraph',
    'entity_bundles' => ['slide', 'slideshow'],
    'entity_view_modes' => ['preview'],
  ]);
}

/**
 * Implements hook_preprocess_paragraph().
 */
function degov_paragraph_slideshow_preprocess_paragraph(&$variables) {
  $paragraph = $variables['paragraph'];
  // Add variables to the slideshow template file.
  if (_getSourceType($paragraph) == 'slideshow') {
    // Add the variable slideshow_type.
    $variables['slideshow_type'] = $paragraph->field_slideshow_type->value;
    $moduleHandler = \Drupal::service('module_handler');
    // Loop each paragraph in the slideshow field to propagate referenced slides.
    if ($moduleHandler->moduleExists('degov_paragraph_node_reference') || $moduleHandler->moduleExists('degov_paragraph_view_reference')) {
      $propagated_slides = [];
      $paragraph_slides = $paragraph->field_slideshow_slides->referencedEntities();
      foreach ($paragraph_slides as $i => $paragraph_slide) {
        if ($paragraph_slide->hasField('field_node_reference_nodes')) {
          // Every node reference should be included as a single slide.
          foreach ($paragraph_slide->field_node_reference_nodes->referencedEntities() as $node) {
            $view_builder = \Drupal::entityManager()->getViewBuilder('node');
            $propagated_slides[] = $view_builder->view($node, 'slideshow');
          }
        }
        elseif ($paragraph_slide->hasField('field_view_reference_view')) {
          // Every node in a view reference should be included as a single slide.
          $result = views_get_view_result($paragraph_slide->field_view_reference_view->target_id, $paragraph_slide->field_view_reference_view->display_id);
          foreach ($result as $row) {
            $view_builder = \Drupal::entityManager()->getViewBuilder('node');
            $propagated_slides[] = $view_builder->view($row->_entity, 'slideshow');
          }
        }
        else {
          // Normal paragraph slides will be included back in the slideshow.
          $propagated_slides[] = $variables['content']['field_slideshow_slides'][$i];
        }
        // Unset each slide, as last step will propagate all slides again.
        unset($variables['content']['field_slideshow_slides'][$i]);
      }
      $variables['content']['field_slideshow_slides'] += $propagated_slides;
    }
  }
  // Add variables to the slideshow template file.
  if (_getSourceType($paragraph) == 'slide') {
    // Add the variable slide_link.
    $variables['slide_link'] = FALSE;
    if ($paragraph->field_slide_link->uri) {
      $url = Url::fromUri($paragraph->field_slide_link->uri);
      //var_dump($url);
      $variables['slide_link'] = $url;
    }
  }
}

function _getSourceType($paragraph) {
  $methods = get_class_methods(get_class($paragraph));
  if(in_array('getSource',$methods)) {
    return $paragraph->getSource();
  }
  else {
    return $paragraph->getType();
  }
}

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

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