commerce_product_bundles-8.x-1.0/src/BundleVariationFieldRendererLayoutBuilder.php

src/BundleVariationFieldRendererLayoutBuilder.php
<?php

namespace Drupal\commerce_product_bundles;

use Drupal\commerce_product_bundles\Entity\ProductBundleVariationInterface;
use Drupal\commerce_product_bundles\Plugin\Block\BundleVariationFieldBlock;
use Drupal\commerce_product_bundles\Service\ProductBundleVariationFieldRenderer;
use Drupal\Component\Plugin\PluginBase;
use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;
use Drupal\layout_builder\LayoutEntityHelperTrait;

/**
 * Class BundleVariationFieldRendererLayoutBuilder
 *
 * Code was taken from and modified:
 * @see \Drupal\commerce_product\ProductVariationFieldRendererLayoutBuilder
 *
 * @package Drupal\commerce_product_bundles
 */
class BundleVariationFieldRendererLayoutBuilder extends ProductBundleVariationFieldRenderer {

  use LayoutEntityHelperTrait;

  /**
   * The entity display repository.
   *
   * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface
   */
  protected $entityDisplayRepository;

  /**
   * BundleVariationFieldRendererLayoutBuilder constructor.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository
   */
  public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityDisplayRepositoryInterface $entity_display_repository) {
    parent::__construct($entity_type_manager);
    $this->entityDisplayRepository = $entity_display_repository;
  }

  /**
   * {@inheritdoc}
   */
  public function renderFields(ProductBundleVariationInterface $bundle_variation, $view_mode = 'default') {
    $bundle_product = $bundle_variation->getBundleProduct();
    assert($bundle_product !== NULL);
    $view_mode_display = $this->entityDisplayRepository->getViewDisplay($bundle_product->getEntityTypeId(), $bundle_product->bundle());
    // Check if layouts are enabled for that product.
    if ($view_mode_display instanceof LayoutBuilderEntityViewDisplay && $view_mode_display->isLayoutBuilderEnabled()) {
      $sections = $view_mode_display->getSections();
      if ($view_mode_display->isOverridable() && $overrides = $this->getEntitySections($bundle_variation->getBundleProduct())) {
        $sections = $overrides;
      }
      return $this->renderLayoutBuilderFields($bundle_variation, $sections);
    }
    return parent::renderFields($bundle_variation, $view_mode);
  }

  /**
   * Render fields.
   *
   * @param \Drupal\commerce_product_bundles\Entity\ProductBundleVariationInterface $bundle_variation
   * @param array $sections
   *
   * @return array
   */
  protected function renderLayoutBuilderFields(ProductBundleVariationInterface $bundle_variation, array $sections) {
    $build = [];

    // Loop trough sections, grab their components.
    foreach ($sections as $section) {
      $components = $section->getComponents();
      foreach ($components as $component) {
        $plugin = $component->getPlugin();
        if ($plugin instanceof BundleVariationFieldBlock) {
          $plugin_id = $plugin->getPluginId();

          [,,, $field_name] = explode(PluginBase::DERIVATIVE_SEPARATOR, $plugin_id, 4);
          $display_options = $plugin->getConfiguration()['formatter'];

          // Render field with display options provided from plugin formatter.
          $build[$field_name] = $this->prepareForAjax($this->renderField($field_name, $bundle_variation, $display_options), $field_name, $bundle_variation);
        }
      }
    }

    return $build;
  }

}

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

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