hasTranslation($langcode)) { // If the entity has translation, fetch the translated value. $values = $entity->getTranslation($langcode)->get($field_name)->getValue(); } else { // Entity doesn't have translation, fetch original value. $values = $entity->get($field_name)->getValue(); } $value = isset($values[0]['uri']) ? $values[0]['uri'] : (isset($values[0]['value']) ? $values[0]['value'] : ''); $value = strip_tags($value); return trim($value); } /** * Returns the formatted renderable array of the field. */ public function getFieldRenderable($entity, $field_name = '', $view_mode = 'full') { $view = []; $has_field = !empty($field_name) && isset($entity->{$field_name}); if ($has_field && !empty($entity->{$field_name}->view($view_mode)[0])) { $view = $entity->get($field_name)->view($view_mode); // Prevents quickedit to operate here as otherwise JS error. // @see 2314185, 2284917, 2160321. // @see quickedit_preprocess_field(). // @todo: Remove when it respects plugin annotation. $view['#view_mode'] = '_custom'; } return $view; } /** * Build image/video preview either using theme_blazy(), or view builder. * * This is alternative to Drupal\blazy\BlazyFormatterManager used outside * field formatters, such as Views field, or Entity Browser displays, etc. * * @param array $data * An array of data containing settings, and image item. * @param object $entity * The media entity, else file entity to be associated to media if any. * @param string $fallback * The fallback string to display such as file name or entity label. * * @return array * The renderable array of theme_blazy(), or view builder, else empty. */ public function buildPreview(array $data, $entity, $fallback = '') { $build = []; if (!$entity instanceof EntityInterface) { return []; } // Supports VEM/ME if Drupal\blazy\Dejavu\BlazyVideoTrait is imported. if (method_exists($this, 'getMediaItem')) { $this->getMediaItem($data, $entity); } $settings = &$data['settings']; if (!empty($data['item'])) { if (!empty($settings['media_switch'])) { $is_lightbox = $this->blazyManager()->getLightboxes() && in_array($settings['media_switch'], $this->blazyManager()->getLightboxes()); $settings['lightbox'] = $is_lightbox ? $settings['media_switch'] : FALSE; } if (empty($settings['uri'])) { $settings['uri'] = ($file = $data['item']->entity) && empty($data['item']->uri) ? $file->getFileUri() : $data['item']->uri; } // Provide simple Blazy, if required. if (empty($settings['_basic'])) { $build = $this->blazyManager()->getImage($data); } else { $build = [ '#theme' => 'blazy', '#item' => $data['item'], '#settings' => $settings, ]; } // Provides a shortcut to get URI. $build['#uri'] = empty($settings['uri']) ? '' : $settings['uri']; // Allows top level elements to load Blazy once rather than per field. // This is still here for non-supported Views style plugins, etc. if (empty($settings['_detached'])) { $load = $this->blazyManager()->attach($settings); // Enforces loading elements hidden by EB "Show selected" button. $load['drupalSettings']['blazy']['loadInvisible'] = TRUE; $build['#attached'] = $load; } } else { $build = $this->blazyManager()->getEntityView($entity, $settings, $fallback); } return $build; } }