abstract class BlazyEntityReferenceBase in Blazy 8
Same name and namespace in other branches
- 8.2 src/Dejavu/BlazyEntityReferenceBase.php \Drupal\blazy\Dejavu\BlazyEntityReferenceBase
Base class for entity reference formatters with field details.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase
- class \Drupal\blazy\Dejavu\BlazyEntityBase
- class \Drupal\blazy\Dejavu\BlazyEntityReferenceBase uses BlazyEntityTrait
- class \Drupal\blazy\Dejavu\BlazyEntityBase
- class \Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of BlazyEntityReferenceBase
1 file declares its use of BlazyEntityReferenceBase
- BlazyTestEntityReferenceFormatterTest.php in tests/
modules/ blazy_test/ src/ Plugin/ Field/ FieldFormatter/ BlazyTestEntityReferenceFormatterTest.php
File
- src/
Dejavu/ BlazyEntityReferenceBase.php, line 10
Namespace
Drupal\blazy\DejavuView source
abstract class BlazyEntityReferenceBase extends BlazyEntityBase {
use BlazyEntityTrait;
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
return BlazyDefault::extendedSettings();
}
/**
* {@inheritdoc}
*/
public function buildElement(array &$build, $entity, $langcode) {
$settings =& $build['settings'];
$item_id = $settings['item_id'] = empty($settings['item_id']) ? 'box' : $settings['item_id'];
$view_mode = $settings['view_mode'] = empty($settings['view_mode']) ? 'full' : $settings['view_mode'];
if (!empty($settings['vanilla'])) {
return parent::buildElement($build, $entity, $langcode);
}
$delta = isset($settings['delta']) ? $settings['delta'] : 0;
$element = [
'settings' => $settings,
];
// Built early before stage to allow custom highres video thumbnail later.
// Implementor must import: Drupal\blazy\Dejavu\BlazyVideoTrait.
if (method_exists($this, 'getMediaItem')) {
$this
->getMediaItem($element, $entity);
}
// Build the main stage.
$this
->buildStage($element, $entity, $langcode);
// If Image rendered is picked, render image as is.
if (!empty($settings['image']) && (!empty($settings['media_switch']) && $settings['media_switch'] == 'rendered')) {
$element['content'][] = $this
->getFieldRenderable($entity, $settings['image'], $view_mode);
}
// Optional image with responsive image, lazyLoad, and lightbox supports.
$element[$item_id] = empty($element['item']) ? [] : $this
->formatter()
->getImage($element);
// Captions if so configured.
$this
->getCaption($element, $entity, $langcode);
// Layouts can be builtin, or field, if so configured.
if (!empty($settings['layout'])) {
$layout = $settings['layout'];
if (strpos($layout, 'field_') !== FALSE) {
$settings['layout'] = $this
->getFieldString($entity, $layout, $langcode);
}
$element['settings']['layout'] = $settings['layout'];
}
// Classes, if so configured.
if (!empty($settings['class'])) {
$element['settings']['class'] = $this
->getFieldString($entity, $settings['class'], $langcode);
}
// Build the main item.
$build['items'][$delta] = $element;
// Build the thumbnail item.
if (!empty($settings['nav'])) {
// Thumbnail usages: asNavFor pagers, dot, arrows, photobox thumbnails.
$element[$item_id] = empty($settings['thumbnail_style']) ? [] : $this
->formatter()
->getThumbnail($element['settings'], $element['item']);
$element['caption'] = empty($settings['thumbnail_caption']) ? [] : $this
->getFieldRenderable($entity, $settings['thumbnail_caption'], $view_mode);
$build['thumb']['items'][$delta] = $element;
}
}
/**
* Builds slide captions with possible multi-value fields.
*/
public function getCaption(array &$element, $entity, $langcode) {
$settings = $element['settings'];
$view_mode = $settings['view_mode'];
// Title can be plain text, or link field.
if (!empty($settings['title'])) {
$field_title = $settings['title'];
if (isset($entity->{$field_title})) {
if ($entity
->hasTranslation($langcode)) {
// If the entity has translation, fetch the translated value.
$title = $entity
->getTranslation($langcode)
->get($field_title)
->getValue();
}
else {
// Entity doesn't have translation, fetch original value.
$title = $entity
->get($field_title)
->getValue();
}
if (!empty($title[0]['value']) && !isset($title[0]['uri'])) {
// Prevents HTML-filter-enabled text from having bad markups (h2 > p),
// except for a few reasonable tags acceptable within H2 tag.
$element['caption']['title']['#markup'] = strip_tags($title[0]['value'], '<a><strong><em><span><small>');
}
elseif (isset($title[0]['uri']) && !empty($title[0]['title'])) {
$element['caption']['title'] = $this
->getFieldRenderable($entity, $field_title, $view_mode)[0];
}
}
}
// Other caption fields, if so configured.
if (!empty($settings['caption'])) {
$caption_items = [];
foreach ($settings['caption'] as $i => $field_caption) {
if (!isset($entity->{$field_caption})) {
continue;
}
$caption_items[$i] = $this
->getFieldRenderable($entity, $field_caption, $view_mode);
}
if ($caption_items) {
$element['caption']['data'] = $caption_items;
}
}
// Link, if so configured.
if (!empty($settings['link'])) {
$field_link = $settings['link'];
if (isset($entity->{$field_link})) {
$links = $this
->getFieldRenderable($entity, $field_link, $view_mode);
// Only simplify markups for known formatters registered by link.module.
if ($links && isset($links['#formatter']) && in_array($links['#formatter'], [
'link',
])) {
$links = [];
foreach ($entity->{$field_link} as $i => $link) {
$links[$i] = $link
->view($view_mode);
}
}
$element['caption']['link'] = $links;
}
}
if (!empty($settings['overlay'])) {
$element['caption']['overlay'] = $this
->getOverlay($settings, $entity, $langcode);
}
}
/**
* Builds overlay placed within the caption.
*/
public function getOverlay(array $settings, $entity, $langcode) {
return $entity
->get($settings['overlay'])
->view($settings['view_mode']);
}
/**
* Build the main background/stage, image or video.
*
* Main image can be separate image item from video thumbnail for highres.
* Fallback to default thumbnail if any, which has no file API.
*/
public function buildStage(array &$element, $entity, $langcode) {
$settings =& $element['settings'];
$stage = empty($settings['source_field']) ? '' : $settings['source_field'];
$stage = empty($settings['image']) ? $stage : $settings['image'];
// The actual video thumbnail has already been downloaded earlier.
// This fetches the highres image if provided and available.
// With a mix of image and video, image is not always there.
if ($stage && isset($entity->{$stage})) {
/** @var \Drupal\file\Plugin\Field\FieldType\FileFieldItemList $file */
$file = $entity
->get($stage);
$value = $file
->getValue();
// Do not proceed if it is a Media entity video.
if (isset($value[0]) && $value[0]) {
// If image, even if multi-value, we can only have one stage per slide.
if (isset($value[0]['target_id']) && !empty($value[0]['target_id'])) {
if (method_exists($file, 'referencedEntities') && isset($file
->referencedEntities()[0])) {
/** @var \Drupal\image\Plugin\Field\FieldType\ImageItem $item */
$element['item'] = $file
->get(0);
// Collects cache tags to be added for each item in the field.
$settings['file_tags'] = $file
->referencedEntities()[0]
->getCacheTags();
$settings['uri'] = $file
->referencedEntities()[0]
->getFileUri();
}
}
elseif (isset($value[0]['value']) || isset($value[0]['uri'])) {
$settings['input_url'] = $this
->getFieldString($entity, $stage, $langcode);
if ($settings['input_url']) {
$this
->buildVideo($settings);
$element['item'] = $value;
}
}
}
}
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$element = parent::settingsForm($form, $form_state);
if (isset($element['layout'])) {
$layout_description = $element['layout']['#description'];
$element['layout']['#description'] = $this
->t('Create a dedicated List (text - max number 1) field related to the caption placement to have unique layout per slide with the following supported keys: top, right, bottom, left, center, center-top, etc. Be sure its formatter is Key.') . ' ' . $layout_description;
}
if (isset($element['media_switch'])) {
$element['media_switch']['#options']['rendered'] = $this
->t('Image rendered by its formatter');
$element['media_switch']['#description'] .= ' ' . $this
->t('Be sure the enabled fields here are not hidden/disabled at its view mode.');
}
if (isset($element['caption'])) {
$element['caption']['#description'] = $this
->t('Check fields to be treated as captions, even if not caption texts.');
}
if (isset($element['image']['#description'])) {
$element['image']['#description'] .= ' ' . $this
->t('For video, this allows separate highres image, be sure the same field used for Image to have a mix of videos and images. Leave empty to fallback to the video provider thumbnails. The formatter/renderer is managed by <strong>@namespace</strong> formatter. Meaning original formatter ignored. If you want original formatters, check <strong>Vanilla</strong> option. Alternatively choose <strong>Media switcher > Image rendered </strong>, other image-related settings here will be ignored. <strong>Supported fields</strong>: Image, Video Embed Field.', [
'@namespace' => $this
->getPluginId(),
]);
}
if (isset($element['overlay']['#description'])) {
$element['overlay']['#description'] .= ' ' . $this
->t('The formatter/renderer is managed by the child formatter. <strong>Supported fields</strong>: Image, Video Embed Field, Media Entity.');
}
return $element;
}
/**
* {@inheritdoc}
*/
public function getScopedFormElements() {
$admin = $this
->admin();
$target_type = $this
->getFieldSetting('target_type');
$views_ui = $this
->getFieldSetting('handler') == 'default';
$bundles = $views_ui ? [] : $this
->getFieldSetting('handler_settings')['target_bundles'];
$strings = [
'text',
'string',
'list_string',
];
$strings = $admin
->getFieldOptions($bundles, $strings, $target_type);
$texts = [
'text',
'text_long',
'string',
'string_long',
'link',
];
$texts = $admin
->getFieldOptions($bundles, $texts, $target_type);
$links = [
'text',
'string',
'link',
];
return [
'background' => TRUE,
'box_captions' => TRUE,
'breakpoints' => BlazyDefault::getConstantBreakpoints(),
'captions' => $admin
->getFieldOptions($bundles, [], $target_type),
'classes' => $strings,
'fieldable_form' => TRUE,
'images' => $admin
->getFieldOptions($bundles, [
'image',
], $target_type),
'image_style_form' => TRUE,
'layouts' => $strings,
'links' => $admin
->getFieldOptions($bundles, $links, $target_type),
'media_switch_form' => TRUE,
'multimedia' => TRUE,
'thumb_captions' => $texts,
'thumb_positions' => TRUE,
'nav' => TRUE,
'titles' => $texts,
'vanilla' => TRUE,
] + parent::getScopedFormElements();
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BlazyEntityBase:: |
public | function | Returns media contents. | |
BlazyEntityReferenceBase:: |
public | function |
Returns item contents. Overrides BlazyEntityBase:: |
|
BlazyEntityReferenceBase:: |
public | function | Build the main background/stage, image or video. | |
BlazyEntityReferenceBase:: |
public static | function |
Defines the default settings for this plugin. Overrides PluginSettingsBase:: |
1 |
BlazyEntityReferenceBase:: |
public | function | Builds slide captions with possible multi-value fields. | |
BlazyEntityReferenceBase:: |
public | function | Builds overlay placed within the caption. | |
BlazyEntityReferenceBase:: |
public | function |
Defines the scope for the form elements. Overrides BlazyEntityBase:: |
1 |
BlazyEntityReferenceBase:: |
public | function |
Returns a form to configure settings for the formatter. Overrides BlazyEntityBase:: |
|
BlazyEntityTrait:: |
public | function | Build image/video preview either using theme_blazy(), or view builder. | |
BlazyEntityTrait:: |
public | function | Returns the formatted renderable array of the field. | |
BlazyEntityTrait:: |
public | function | Returns the string value of the fields: link, or text. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
EntityReferenceFormatterBase:: |
protected | function | Checks access to the given entity. | 3 |
EntityReferenceFormatterBase:: |
protected | function | Returns the referenced entities for display. | 1 |
EntityReferenceFormatterBase:: |
protected | function | Returns whether the entity referenced by an item needs to be loaded. | 1 |
EntityReferenceFormatterBase:: |
public | function |
Loads the entities referenced in that field across all the entities being
viewed. Overrides FormatterBase:: |
|
EntityReferenceFormatterBase:: |
public | function |
Overrides FormatterBase:: |
|
FormatterBase:: |
protected | property | The field definition. | |
FormatterBase:: |
protected | property | The label display setting. | |
FormatterBase:: |
protected | property |
The formatter settings. Overrides PluginSettingsBase:: |
|
FormatterBase:: |
protected | property | The view mode. | |
FormatterBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
11 |
FormatterBase:: |
protected | function | Returns the value of a field setting. | |
FormatterBase:: |
protected | function | Returns the array of field settings. | |
FormatterBase:: |
public static | function |
Returns if the formatter can be used for the provided field. Overrides FormatterInterface:: |
14 |
FormatterBase:: |
public | function |
Returns a short summary for the current formatter settings. Overrides FormatterInterface:: |
22 |
FormatterBase:: |
public | function |
Constructs a FormatterBase object. Overrides PluginBase:: |
11 |
FormatterInterface:: |
public | function | Builds a renderable array for a field value. | 47 |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginSettingsBase:: |
protected | property | Whether default settings have been merged into the current $settings. | |
PluginSettingsBase:: |
protected | property | The plugin settings injected by third party modules. | |
PluginSettingsBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
PluginSettingsBase:: |
public | function |
Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
protected | function | Merges default settings values into $settings. | |
PluginSettingsBase:: |
public | function |
Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface:: |
3 |
PluginSettingsBase:: |
public | function |
Sets the value of a setting for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the settings for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |