Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
PrimaryEntityReferenceRenderedEntityFormatter
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
1 / 1
 viewElements
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\primary_entity_reference\Plugin\Field\FieldFormatter;
6
7use Drupal\Core\Field\Attribute\FieldFormatter;
8use Drupal\Core\Field\FieldItemListInterface;
9use Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceEntityFormatter;
10use Drupal\Core\StringTranslation\TranslatableMarkup;
11
12/**
13 * Primary entity reference rendered entity formatter.
14 *
15 * Displays only the primary referenced entity rendered in a view mode.
16 */
17#[FieldFormatter(
18  id: 'primary_entity_reference_rendered_entity',
19  label: new TranslatableMarkup('Rendered entity (Primary Only)'),
20  description: new TranslatableMarkup('Display the primary referenced entity rendered in a specific view mode.'),
21  field_types: ['primary_entity_reference'],
22)]
23class PrimaryEntityReferenceRenderedEntityFormatter extends EntityReferenceEntityFormatter {
24
25  /**
26   * {@inheritdoc}
27   */
28  public function viewElements(FieldItemListInterface $items, $langcode) {
29    // Get the primary item from the field.
30    $primary = $items->primary();
31
32    // Return empty array if no primary item exists.
33    if (!$primary) {
34      return [];
35    }
36
37    // Clone the items list and set only the primary value to avoid mutating
38    // the original field data.
39    $primary_items = clone $items;
40    $primary_items->setValue([$primary->getValue()]);
41
42    // Delegate to parent formatter for actual rendering.
43    return parent::viewElements($primary_items, $langcode);
44  }
45
46}