ui_patterns_layout_builder-8.x-1.x-dev/src/Element/PatternLayoutBuilder.php

src/Element/PatternLayoutBuilder.php
<?php

namespace Drupal\ui_patterns_layout_builder\Element;

use Drupal\Core\Render\Element;
use Drupal\Core\Security\TrustedCallbackInterface;
use Drupal\Core\Template\Attribute;
use Drupal\ui_patterns\UiPatterns;

/**
 * Renders a pattern element.
 */
class PatternLayoutBuilder implements TrustedCallbackInterface {

  /**
   * {@inheritdoc}
   */
  public static function trustedCallbacks() {
    return ['processLayoutBuilderRegions'];
  }

  /**
   * Process layout builder regions.
   *
   * Layout builder adds foreach region an renderable array
   * after the pattern is built. So reassign the region to fields.
   *
   * @param array $element
   *   Render array.
   *
   * @return array
   *   Render array.
   */
  public static function processLayoutBuilderRegions(array $element) {
    $definiton = UiPatterns::getPatternDefinition($element['#id']);

    if ($definiton != NULL) {
      foreach (Element::children($element) as $key) {
        if ($definiton->hasField($key)) {
          $region_children = Element::children($element[$key]);
          $region_properties = Element::properties($element[$key]);
          if (isset($element['#' . $key]) && is_string($element['#' . $key])) {
            continue;
          }

          foreach ($region_children as $region_key) {
            $element['#' . $key][$region_key] = $element[$key][$region_key];
          }

          foreach ($region_properties as $property_key) {
            if ($property_key === '#attributes') {
              $element['#region_attributes'][$key] = new Attribute($element[$key][$property_key]);
            }
          }

          // Disabled unset region key. Region Used in quick edit.
          // unset($element[$key]);.
        }
      }
    }
    return $element;
  }

}

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

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