external_entity-1.0.x-dev/external_entity.module

external_entity.module
<?php

/**
 * @file
 * Define the hook implementations for the external entity.
 */

declare(strict_types=1);

use Drupal\Core\Render\Element;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Entity\EntityFieldManagerInterface;
use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
use Drupal\external_entity\Contracts\ExternalEntityInterface;

/**
 * Implements hook_form_FORM_ID_alter().
 */
function external_entity_form_entity_view_display_edit_form_alter(
  &$form,
  FormStateInterface $form_state,
): void {
  if (!isset($form['#entity_type'], $form['#bundle'])) {
    return;
  }
  $fields = &$form['fields'];
  $bundle = $form['#bundle'];
  $entity_type = $form['#entity_type'];

  $field_exclude_formatters = [
    'entity_reference_entity_view',
  ];
  $field_definitions = external_entity_field_manager()
    ->getFieldDefinitions($entity_type, $bundle);

  foreach (Element::children($fields) as $field_name) {
    if (
      !isset($field_definitions[$field_name])
      || empty($field_definitions[$field_name])) {
      continue;
    }
    $field_definition = $field_definitions[$field_name];
    $field_class = $field_definition->getClass();

    if (
      !is_subclass_of($field_class, EntityReferenceFieldItemListInterface::class)
      || $field_definition->getSetting('target_type') !== 'external_entity'
    ) {
      continue;
    }
    $options = &$fields[$field_name]['plugin']['type']['#options'];

    foreach ($field_exclude_formatters as $formatter_type) {
      unset($options[$formatter_type]);
    }
  }
}

/**
 * Implements hook_preprocess_node().
 */
function external_entity_preprocess_node(array &$variables) {
  if (
    ($node = $variables['node'])
    && isset($node->external_entity)
    && $node->external_entity instanceof ExternalEntityInterface
  ) {
    $external_entity = $node->external_entity;
    $variables['url'] = $external_entity->getPath();
  }
}

/**
 * Get external entity field manager.
 *
 * @return \Drupal\Core\Entity\EntityFieldManagerInterface
 */
function external_entity_field_manager(): EntityFieldManagerInterface {
  return \Drupal::service('entity_field.manager');
}

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

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