acquia_commercemanager-8.x-1.122/modules/acm_sku/src/Plugin/Field/FieldFormatter/ProductImageLinkFormatter.php

modules/acm_sku/src/Plugin/Field/FieldFormatter/ProductImageLinkFormatter.php
<?php

namespace Drupal\acm_sku\Plugin\Field\FieldFormatter;

use Drupal\image\Plugin\Field\FieldFormatter\ImageFormatter;

use Drupal\Core\Field\FieldItemListInterface;

/**
 * Plugin implementation of the 'product_link' formatter.
 *
 * @FieldFormatter(
 *   id = "product_link",
 *   label = @Translation("Product Link"),
 *   field_types = {
 *     "image"
 *   }
 * )
 */
class ProductImageLinkFormatter extends ImageFormatter {

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = parent::viewElements($items, $langcode);

    // Load associated product display node.
    $config = \Drupal::configFactory()->get('acm.connector');
    $product_node_type = $config->get('product_node_type') ?: 'acm_product';
    $sku_field_name = $config->get('sku_field_name') ?: 'field_skus';
    $entity = $items->getEntity();

    $query = \Drupal::entityQuery('node')
      ->condition('type', $product_node_type)
      ->condition($sku_field_name, $entity->getSku());
    $nids = $query->execute();
    $nid = reset($nids);

    $node_entity = \Drupal::entityTypeManager()->getStorage('node')->load($nid);

    $url = $node_entity->urlInfo();

    foreach ($elements as &$element) {
      if (!is_null($element['#url'])) {
        $element['#url'] = $url;
      }
    }

    return $elements;
  }

}

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

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