diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php new file mode 100644 index 0000000..1e07538 --- /dev/null +++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php @@ -0,0 +1,90 @@ + t('Image style'), + '#type' => 'select', + '#default_value' => $this->getSetting('image_style'), + '#empty_option' => t('None (original image)'), + '#options' => $image_styles, + '#description' => array( + '#markup' => $this->linkGenerator->generate($this->t('Configure Image Styles'), new Url('entity.image_style.collection')), + '#access' => $this->currentUser->hasPermission('administer image styles'), + ), + ); + + return $element; + } + + /** + * {@inheritdoc} + */ + public function viewElements(FieldItemListInterface $items) { + $elements = array(); + $images = $this->getEntitiesToView($items); + + // Early opt-out if the field is empty. + if (empty($images)) { + return $elements; + } + + $url = NULL; + + $image_style_setting = $this->getSetting('image_style'); + + // Collect cache tags to be added for each item in the field. + $cache_tags = []; + if (!empty($image_style_setting)) { + $image_style = $this->imageStyleStorage->load($image_style_setting); + $cache_tags = $image_style->getCacheTags(); + } + + foreach ($images as $delta => $image) { + $image_uri = $image->getFileUri(); + $url = $image_style + ? $image_style->buildUrl($image_uri) + : file_create_url($image_uri); + + $cache_tags = Cache::mergeTags($cache_tags, $image->getCacheTags()); + + $elements[$delta] = array( + '#markup' => $url, + '#cache' => array( + 'tags' => $cache_tags, + ), + ); + } + + return $elements; + } +}