blazy-8.x-2.x-dev/src/Plugin/Field/FieldFormatter/BlazyFormatterViewBaseTrait.php
src/Plugin/Field/FieldFormatter/BlazyFormatterViewBaseTrait.php
<?php
namespace Drupal\blazy\Plugin\Field\FieldFormatter;
use Drupal\Core\Field\FieldItemListInterface;
/**
* A Trait common for all blazy, including its sub-modules, text formatters.
*
* By-passed routines at BlazyFormatter designed for Image, Media, entities.
* Bp-passed theme_[blazy|slick|splide|gridstack|mason|etc.]() routines for
* more relevant themes/ types like processed_text, or others.
*/
trait BlazyFormatterViewBaseTrait {
/**
* Returns base view elements.
*/
protected function baseViewElements(
FieldItemListInterface $items,
$langcode,
array $settings = [],
): array {
// Early opt-out if the field is empty.
if ($items->isEmpty()) {
return [];
}
// Collects specific settings to this formatter.
$defaults = $this->buildSettings();
$settings = $this->formatter->merge($settings, $defaults);
// Internal overrides before enough data is populated below.
$this->preSettings($settings, $langcode);
// BlazyFormatter::buildSettings() contains media, irrelevant for texts.
// @todo move it into ::minimalSettings().
$this->formatter->fieldSettings($settings, $items);
// Ensures grids are respected in the least.
$this->formatter->minimalSettings($settings, $items);
// Internal overrides after enough data is populated above.
$this->postSettings($settings, $langcode);
// Build the settings.
$build = ['#settings' => $settings, '#langcode' => $langcode];
// Build the elements, and satisfy phpstan.
/* @phpstan-ignore-next-line */
if (method_exists($this, 'buildElements')) {
// @todo remove $langcode at 3.x:
$this->buildElements($build, $items, $langcode);
}
// Pass to manager for easy updates to all ecosystem formatters.
$output = $this->manager->build($build);
$settings = $this->manager->toHashtag($build);
// Return without field markup, if not so configured, else field.html.twig.
return empty($settings['use_theme_field']) ? $output : [$output];
}
/**
* Prepare the settings, allows sub-modules to re-use and override.
*/
protected function preSettings(array &$settings, $langcode): void {
$blazies = $settings['blazies'];
$blazies->set('language.code', $langcode);
}
/**
* Overrides the settings, allows sub-modules to re-use and override.
*/
protected function postSettings(array &$settings, $langcode): void {
// Do nothing.
}
}
