cms_content_sync-3.0.x-dev/src/Plugin/cms_content_sync/field_handler/DefaultMenuLinkContentReferenceHandler.php

src/Plugin/cms_content_sync/field_handler/DefaultMenuLinkContentReferenceHandler.php
<?php

namespace Drupal\cms_content_sync\Plugin\cms_content_sync\field_handler;

use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\cms_content_sync\PullIntent;

/**
 * Reference menu references and make sure they're published as the content
 * comes available.
 *
 * @FieldHandler(
 *   id = "cms_content_sync_default_menu_link_content_reference_handler",
 *   label = @Translation("Default Menu Link Content Reference"),
 *   weight = 80
 * )
 */
class DefaultMenuLinkContentReferenceHandler extends DefaultEntityReferenceHandler {

  /**
   * {@inheritdoc}
   */
  public static function supports($entity_type, $bundle, $field_name, FieldDefinitionInterface $field) {
    return 'menu_link_content' == $entity_type && 'parent' == $field_name;
  }

  /**
   * {@inheritdoc}
   */
  protected function forcePushingReferencedEntities() {
    return TRUE;
  }

  /**
   * {@inheritdoc}
   */
  protected function loadReferencedEntityFromFieldValue($value) {
    if (empty($value) || empty($value['value'])) {
      return NULL;
    }

    [$entity_type, $uuid] = explode(':', $value['value']);
    if ('menu_link_content' != $entity_type || empty($uuid)) {
      return NULL;
    }

    return \Drupal::service('entity.repository')->loadEntityByUuid(
          'menu_link_content',
          $uuid
      );
  }

  /**
   * {@inheritdoc}
   */
  protected function getFieldValuesForReference(EntityInterface $reference, PullIntent $intent, array $info) {
    return 'menu_link_content:' . $reference->uuid();
  }

  /**
   * {@inheritdoc}
   */
  protected function getReferencedEntityTypes() {
    return ['menu_link_content'];
  }

}

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

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