trait EntityReferenceDisplayFormatterTrait in Entity Reference Display 8
Plugin trait for the 'entity_reference_display' formatters.
Hierarchy
- trait \Drupal\entity_reference_display\Plugin\Field\FieldFormatter\EntityReferenceDisplayFormatterTrait
File
- src/
Plugin/ Field/ FieldFormatter/ EntityReferenceDisplayFormatterTrait.php, line 12
Namespace
Drupal\entity_reference_display\Plugin\Field\FieldFormatterView source
trait EntityReferenceDisplayFormatterTrait {
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
return [
'display_field' => NULL,
] + parent::defaultSettings();
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$element = [];
// Get display mode fields.
$display_fields = $this
->getDisplayFields();
// Create select element.
$element['display_field'] = [
'#type' => 'select',
'#title' => $this
->t('Display mode field'),
'#description' => $this
->t('Select a field of which value will be used as a display mode for rendering.'),
'#options' => $display_fields,
'#default_value' => $this
->getSetting('display_field'),
'#required' => TRUE,
'#access' => count($display_fields) > 1,
];
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$summary = [];
// Get display mode fields.
$display_fields = $this
->getDisplayFields();
// Get selected display mode field.
$display_field = $this
->getDisplayField($display_fields);
// Find field label.
$field_label = $display_fields[$display_field];
// Create settings summary.
$summary[] = $this
->t('Rendered by display mode selected in "@field" field.', [
'@field' => $field_label,
]);
return $summary;
}
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items, $langcode) {
// Get display mode fields.
$display_fields = $this
->getDisplayFields();
// Get selected display mode field.
$display_field = $this
->getDisplayField($display_fields);
/** @var \Drupal\Core\Entity\FieldableEntityInterface $entity */
$entity = $items
->getEntity();
// Only if entity has this field.
if ($entity
->hasField($display_field)) {
// Get selected display mode value from field.
$display_mode = $entity
->get($display_field)->value;
// Only if some value available.
if (!empty($display_mode)) {
// Override display mode setting.
$this
->setSetting('view_mode', $display_mode);
}
}
// Use parent method for rendering.
return parent::viewElements($items, $langcode);
}
/**
* {@inheritdoc}
*/
public static function isApplicable(FieldDefinitionInterface $field_definition) {
// Get all fields associated with current entity.
$entity_type = $field_definition
->getTargetEntityTypeId();
$entity_bundle = $field_definition
->getTargetBundle();
if (!empty($entity_bundle)) {
$entity_fields = \Drupal::service('entity_field.manager')
->getFieldDefinitions($entity_type, $entity_bundle);
/** @var \Drupal\Core\Field\FieldDefinitionInterface $field */
foreach ($entity_fields as $field) {
// Formatter is only available for entity types with display mode field.
if ($field
->getType() == 'entity_reference_display') {
return TRUE;
}
}
}
return FALSE;
}
/**
* Retrieve available display mode fields.
*/
private function getDisplayFields() {
$display_fields = [];
// Get all fields associated with current entity.
$entity_type = $this->fieldDefinition
->getTargetEntityTypeId();
$entity_bundle = $this->fieldDefinition
->getTargetBundle();
$entity_fields = \Drupal::service('entity_field.manager')
->getFieldDefinitions($entity_type, $entity_bundle);
/** @var \Drupal\Core\Field\FieldDefinitionInterface $field */
foreach ($entity_fields as $key => $field) {
// Find display mode fields.
if ($field
->getType() == 'entity_reference_display') {
$display_fields[$key] = $field
->getLabel();
}
}
return $display_fields;
}
/**
* Retrieve selected display mode field.
*/
private function getDisplayField(array $display_fields) {
// Get display mode field setting.
$display_field = $this
->getSetting('display_field');
// Use first field if no setting exists.
if (empty($display_field)) {
$display_field = key($display_fields);
}
return $display_field;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
EntityReferenceDisplayFormatterTrait:: |
public static | function | ||
EntityReferenceDisplayFormatterTrait:: |
private | function | Retrieve selected display mode field. | |
EntityReferenceDisplayFormatterTrait:: |
private | function | Retrieve available display mode fields. | |
EntityReferenceDisplayFormatterTrait:: |
public static | function | ||
EntityReferenceDisplayFormatterTrait:: |
public | function | ||
EntityReferenceDisplayFormatterTrait:: |
public | function | ||
EntityReferenceDisplayFormatterTrait:: |
public | function |