drowl_paragraphs-8.x-3.9/drowl_paragraphs.module

drowl_paragraphs.module
<?php
/**
 * @file
 * DROWL paragraphs enhancements.
 */

use Drupal\Core\Template\Attribute;

/**
 * Prepares variables for modal form add widget template.
 *
 * Default template: paragraphs-add-dialog.html.twig
 *
 * @param array $variables
 *   An associative array containing:
 *   - buttons: An array of buttons to display in the modal form.
 */
function drowl_paragraphs_preprocess_paragraphs_add_dialog(&$variables) {
  // Add backend library form to EXPERIMENTAL WIDGET:
  $variables['add']['#attached']['library'][] = 'drowl_paragraphs/drowl-paragraphs-backend';
}

/**
 * Prepared variables for paragraph output:
 */
function drowl_paragraphs_preprocess_paragraph(&$variables) {
  // Add frontend library for paragraphs display:
  $variables['#attached']['library'][] = 'drowl_paragraphs/drowl-paragraphs-frontend';

  // Create classes from paragraph_settings field
  if (!empty($variables['paragraph'])) {
    $paragraph = $variables['paragraph'];

    $variables['layout_attributes'] = new \Drupal\Core\Template\Attribute(isset($variables['layout_attributes']) ? $variables['layout_attributes'] : array());
    $variables['layout_wrapper_attributes'] = new \Drupal\Core\Template\Attribute(isset($variables['layout_wrapper_attributes']) ? $variables['layout_wrapper_attributes'] : array());
    $variables['attributes'] = new \Drupal\Core\Template\Attribute(isset($variables['attributes']) ? $variables['attributes'] : array());

    if ($paragraph->hasField('field_paragraph_settings')) {
      if ($paragraph->get('field_paragraph_settings')
          ->getFieldDefinition()
          ->getType() == 'drowl_paragraphs_settings') {
        $paragraphSettingsArray = $paragraph->get('field_paragraph_settings')
          ->getValue();
        if (!empty($paragraphSettingsArray[0])) {
          $ps = $paragraphSettingsArray[0];

          if (!empty($ps['layout_sm_columns'])) {
            $variables['layout_attributes']->addClass('columns');
            if ($ps['layout_sm_columns'] >= 1) {
              $variables['layout_attributes']->addClass('small-' . $ps['layout_sm_columns']);
            }
          }
          if (!empty($ps['layout_sm_indent'])) {
            $variables['layout_attributes']->addClass('small-offset-' . $ps['layout_sm_indent']);
          }
          if (!empty($ps['layout_sm_reverse_indent'])) {
            $variables['layout_attributes']->addClass('small-rev-offset-' . $ps['layout_sm_reverse_indent']);
          }
          if (!empty($ps['layout_sm_collapse'])) {
            $variables['layout_attributes']->addClass('small-collapse');
          }
          if (!empty($ps['layout_sm_uncollapse'])) {
            $variables['layout_attributes']->addClass('small-uncollapse');
          }

          if (!empty($ps['layout_md_columns'])) {
            $variables['layout_attributes']->addClass('columns');
            if ($ps['layout_md_columns'] >= 1) {
              $variables['layout_attributes']->addClass('medium-' . $ps['layout_md_columns']);
            }
          }
          if (!empty($ps['layout_md_indent'])) {
            $variables['layout_attributes']->addClass('medium-offset-' . $ps['layout_md_indent']);
          }
          if (!empty($ps['layout_md_reverse_indent'])) {
            $variables['layout_attributes']->addClass('medium-rev-offset-' . $ps['layout_md_reverse_indent']);
          }
          if (!empty($ps['layout_md_collapse'])) {
            $variables['layout_attributes']->addClass('medium-collapse');
          }
          if (!empty($ps['layout_md_uncollapse'])) {
            $variables['layout_attributes']->addClass('medium-uncollapse');
          }

          if (!empty($ps['layout_lg_columns'])) {
            $variables['layout_attributes']->addClass('columns');
            if ($ps['layout_lg_columns'] >= 1) {
              $variables['layout_attributes']->addClass('large-' . $ps['layout_lg_columns']);
            }
          }
          if (!empty($ps['layout_lg_indent'])) {
            $variables['layout_attributes']->addClass('large-offset-' . $ps['layout_lg_indent']);
          }
          if (!empty($ps['layout_lg_reverse_indent'])) {
            $variables['layout_attributes']->addClass('large-rev-offset-' . $ps['layout_lg_reverse_indent']);
          }
          if (!empty($ps['layout_lg_collapse'])) {
            $variables['layout_attributes']->addClass('large-collapse');
          }
          if (!empty($ps['layout_lg_uncollapse'])) {
            $variables['layout_attributes']->addClass('large-uncollapse');
          }

          if (!empty($ps['layout_margin_top'])) {
            $variables['attributes']->addClass('mt-' . $ps['layout_margin_top']);
          }
          if (!empty($ps['layout_margin_right'])) {
            $variables['attributes']->addClass('mr-' . $ps['layout_margin_right']);
          }
          if (!empty($ps['layout_margin_bottom'])) {
            $variables['attributes']->addClass('mb-' . $ps['layout_margin_bottom']);
          }
          if (!empty($ps['layout_margin_left'])) {
            $variables['attributes']->addClass('ml-' . $ps['layout_margin_left']);
          }

          if (!empty($ps['layout_padding_top'])) {
            $variables['attributes']->addClass('pt-' . $ps['layout_padding_top']);
          }
          if (!empty($ps['layout_padding_right'])) {
            $variables['attributes']->addClass('pr-' . $ps['layout_padding_right']);
          }
          if (!empty($ps['layout_padding_bottom'])) {
            $variables['attributes']->addClass('pb-' . $ps['layout_padding_bottom']);
          }
          if (!empty($ps['layout_padding_left'])) {
            $variables['attributes']->addClass('pl-' . $ps['layout_padding_left']);
          }


          $animations = [];
          $animations_allowed_count = 4;
          for ($i = 1; $i <= $animations_allowed_count; $i++) {
            if (!empty($ps['style_animation_' . $i . '_events'] && !empty($ps['style_animation_' . $i . '_animation']))) {
              $animations[] = array(
                'event' => $ps['style_animation_' . $i . '_events'],
                'animation' => $ps['style_animation_' . $i . '_animation'],
                'offset' => $ps['style_animation_' . $i . '_offset'],
                'delay' => $ps['style_animation_' . $i . '_delay'],
                'transition_duration' => $ps['style_animation_' . $i . '_transition_duration'],
              );
            }
          }
          if (!empty($animations)) {
            $variables['attributes']->addClass('has-animation');
            $variables['attributes']->setAttribute('data-animations', \Drupal\Component\Serialization\Json::encode($animations));
          }

          if (!empty($ps['layout_min_height'])) {
            $variables['attributes']->addClass('min-height-' . $ps['layout_min_height']);
          }
          if (!empty($ps['layout_section_width'])) {
            $variables['layout_attributes']->addClass($ps['layout_section_width']);
          }

          if (!empty($ps['layout_reverse_order'])) {
            $variables['layout_wrapper_attributes']->addClass('flex-dir-row-reverse');
          }
          if (!empty($ps['layout_align_children_vertical'])) {
            $variables['layout_wrapper_attributes']->addClass('align-' . $ps['layout_align_children_vertical']);
          }
          if (!empty($ps['layout_align_children_horizontal'])) {
            $variables['layout_wrapper_attributes']->addClass('align-' . $ps['layout_align_children_horizontal']);
          }

          if ($ps['layout_sm_columns'] == '-1' || $ps['layout_md_columns'] == '-1' || $ps['layout_lg_columns'] == '-1') {
            // At least one has "automatic" set
            $variables['layout_attributes']->addClass('flex-child-auto');
          }
          else {
            // None is automatic:
            if (empty($ps['layout_sm_columns']) && (!empty($ps['layout_md_columns']) || !empty($ps['layout_lg_columns']))) {
              // add small-12 (full width on small devices)
              $variables['layout_attributes']->addClass('small-12');
            }
          }

          if (!empty($ps['style_boxstyle'])) {
            $variables['attributes']->addClass('box-style box-style--' . $ps['style_boxstyle']);
          }
          if (!empty($ps['style_cutline'])) {
            $variables['attributes']->addClass('cutline cutline--' . $ps['style_cutline']);
          }

          // #webksde-TF: content_attributes not used inside regular paragraph templates?
          // $variables['content_attributes'] = new \Drupal\Core\Template\Attribute(isset($variables['content_attributes']) ? $variables['content_attributes'] : array());
          if (!empty($ps['style_textalign'])) {
            $variables['attributes']->addClass($ps['style_textalign']);
          }
          if (!empty($ps['style_textstyle'])) {
            $variables['attributes']->addClass($ps['style_textstyle']);
          }
          if (!empty($ps['style_textcolumns'])) {
            $variables['attributes']->addClass($ps['style_textcolumns']);
          }
          if (!empty($ps['classes_additional'])) {
            $variables['attributes']->addClass($ps['classes_additional']);
          }
        }
      }
      else {
        trigger_error('Field field_paragraph_settings exists but is not of type "drowl_paragraphs_settings". Ignoring.', E_USER_NOTICE);
      }
    }


    if ($paragraph->hasField('field_paragraphs_paragraphs')) {
      // has subparagraphs field
      $subParagraphsER = $paragraph->get('field_paragraphs_paragraphs');
      if ($subParagraphsER->getFieldDefinition()
          ->getTargetEntityTypeId() == 'paragraph') {
        if (!empty($subParagraphsER)) {
          $subParagraphs = $subParagraphsER->referencedEntities();
          foreach ($subParagraphs as $subParagraph) {
            if ($subParagraph->hasField('field_paragraph_settings')) {
              $subParagraphSettingsArray = $subParagraph->get('field_paragraph_settings')
                ->getValue();
              if (!empty($subParagraphSettingsArray[0]['layout_sm_columns']) || !empty($subParagraphSettingsArray[0]['layout_md_columns']) || !empty($subParagraphSettingsArray[0]['layout_lg_columns'])) {
                $variables['is_row'] = TRUE;
                $variables['attributes']->addClass('has-layout');
                $variables['layout_wrapper_attributes']->addClass('row');
              }
              if ($subParagraphSettingsArray[0]['layout_sm_columns'] == '-1' || $subParagraphSettingsArray[0]['layout_md_columns'] == '-1' || $subParagraphSettingsArray[0]['layout_lg_columns'] == '-1') {
                // At least one has "automatic" set
                $variables['layout_wrapper_attributes']->addClass('large-unstack');
              }
              // Add grid collapse classes to the row
              if (!empty($subParagraphSettingsArray[0]['layout_sm_collapse'])) {
                $variables['layout_wrapper_attributes']->addClass('small-collapse');
              }
              if (!empty($subParagraphSettingsArray[0]['layout_md_collapse'])) {
                $variables['layout_wrapper_attributes']->addClass('medium-collapse');
              }
              if (!empty($subParagraphSettingsArray[0]['layout_lg_collapse'])) {
                $variables['layout_wrapper_attributes']->addClass('large-collapse');
              }
              // Add grid UNcollapse classes to the row
              if (!empty($subParagraphSettingsArray[0]['layout_sm_uncollapse'])) {
                $variables['layout_wrapper_attributes']->addClass('small-uncollapse');
              }
              if (!empty($subParagraphSettingsArray[0]['layout_md_uncollapse'])) {
                $variables['layout_wrapper_attributes']->addClass('medium-uncollapse');
              }
              if (!empty($subParagraphSettingsArray[0]['layout_lg_uncollapse'])) {
                $variables['layout_wrapper_attributes']->addClass('large-uncollapse');
              }
            }
          }
        }
      }
      else {
        trigger_error('Field field_paragraphs_paragraphs exists but its elements are not of type "paragraph". Ignoring.', E_USER_NOTICE);
      }
    }

    // Indicate subparagraph and type of parent paragraph for twig:
    $parentEntity = $paragraph->getParentEntity();
    if($parentEntity instanceof \Drupal\paragraphs\Entity\Paragraph){
      $bundle = $parentEntity->bundle();
      $variables['attributes']->addClass('is-subparagraph');
      // $variables['attributes']->addClass('parent-bundle-' . $bundle);
      $variables['is_subparagraph'] = TRUE;
      $variables['parent_entity_bundle'] = $bundle;
    }
  }
}

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

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