it-swarm.com.de

So erhalten Sie die URL des Medienentitätsbilds (Entitätsreferenzfeld) im Thema TWIG)

Entschuldigung, wenn diese Frage bereits gestellt wurde. Bei meinen Recherchen stellte ich jedoch fest, dass die Antworten für einfache Bildfelder waren, die standardmäßig von Drupal 8.) installiert sind. Um jedoch wiederverwendbare Medien zu haben, verwende ich Media Entity und zugehörige Module Das Problem ist, dass ich nicht auf das Bild oder seine URL in der Vorlage TWIG) zugreifen kann, wo einfache Bildfelder einwandfrei funktionieren.

Der folgende Code funktioniert zwar wie erwartet, wenn field_image ein einfacher Bildtyp ist, funktioniert jedoch nicht, wenn es sich um ein Entitätsreferenzfeld handelt.

<div class="header-title white overlay" style="background-image:url({{content.field_image.0}});">

Im Fall des Entitätsreferenzfelds wird die Ausgabe vollständig maskiert und bricht die Struktur meines Themas. Wie kann ich ein Rohbild oder eine URL erhalten? Ich bin kein Programmierer, daher weiß ich nicht, wie man Präprozessorcode schreibt.

Ich hänge Konfigurationsabbilder für das von mir verwendete Medienpaket und die Knotenkonfiguration an, in der ich die beiden Arten von Bildfeldern verwende.

Media Bundle Konfigurationenter image description here

Knotenkonfiguration. Beachten Sie, dass 'field_image' standardmäßig drupal Bildtyp, während 'field_image2 ' ist ein Entitätsreferenzfeld, wie es im obigen Medienpaket konfiguriert wurde.enter image description here

Bitte geben Sie Ratschläge, wie dies funktioniert. Vielen Dank.

Drupal-Konfiguration

  • Drupal 8.3
  • media_entity_browser-8.x-1.0-beta2
  • media_entity-8.x-1.6
  • media_entity_image-8.x-1.2
  • embed-8.x-1.0-rc3
  • entity-8.x-1.0-beta2
  • inline_entity_form-8.x-1.0-beta1
  • file_entity-8.x-2.0-beta3
  • datei-8.2.6
  • field_formatter-8.x-1.0
  • image_raw_formatter-8.x-1.x-dev
  • image_url_formatter-image_url_formatter
4
Vikram

Wenn dieses auf Entität bezogene Bild von Media gesteuert wird, sollten Sie das normale Rendern zulassen:

{{ content.field_image2 }}

Das Rendern wird dann vom Feldformatierer gesteuert, der einen Anzeigemodus in Media anzeigt, der sich nicht von den Anzeigemodi Node (Standard, Teaser usw.)) unterscheidet.

Ihr Dateiname wäre ungefähr so:

media--media-bundle--display-mode.html.twig
media--media-bundle.html.twig

Der erste ist am spezifischsten, der zweite wäre die Basis für diese Medieneinheit, wo immer sie verwendet wird. Normalerweise entscheide ich mich für den ersten.

In dieser speziellen twig - Vorlage, in der dieser Code leben soll. Das Markup sollte meiner Meinung nach dort anstelle der referenzierenden Entität bezogen werden.

Sie können auch eine Vorverarbeitung durchführen, um dies zu lösen. Hier ist ein Beispiel:

/**
 * Implements hook_preprocess_node().
 * @param $variables
 */
function mytheme_preprocess_node(&$variables) {
  $node = $variables['elements']['#node'];
  $bundle = $node->bundle();

  if ($bundle == 'landing_page' && $variables['elements']['#view_mode'] == 'hero') {
    $hero_image = $node->get('field_hero_image')->getValue();

    if (!empty($hero_image)) {
      $entity = Media::load($hero_image[0]['target_id']);
      $variables['hero_image'] = ImageStyle::load('landing_page_hero')->buildUrl($entity->field_image->entity->getFileUri());
    }
  }
}

Dann in meiner jeweiligen Vorlage ...

<div{{ attributes.addClass(classes) }} style="background-image: url('{{ hero_image }}');"></div>

Alternativ können Sie die Medienentität vorverarbeiten:

/**
 * Prepares variables for media templates.
 *
 * Default template: media.html.twig.
 *
 * @param array $variables
 *   An associative array containing:
 *   - media: An individual media for display.
 */
function mytheme_preprocess_media(&$variables) {
  /** @var \Drupal\media_entity\MediaInterface $media */
  $media = $variables['elements']['#media'];

  $variables['media'] = $media;
  $variables['name'] = $media->label();

  // Helpful $content variable for templates.
  foreach (Element::children($variables['elements']) as $key) {
    $variables['content'][$key] = $variables['elements'][$key];
  }

  $variables['attributes']['class'][] = 'media';
  $variables['attributes']['class'][] = Html::getClass('media-' . $media->bundle());

  if (!$media->isPublished()) {
    $variables['attributes']['class'][] = 'unpublished';
  }

  if ($variables['elements']['#view_mode']) {
    $variables['attributes']['class'][] = Html::getClass('view-mode-' . $variables['elements']['#view_mode']);

    if ($variables['elements']['#view_mode'] == 'hero') {
      $variables['hero_image'] = ImageStyle::load('hero')->buildUrl($media->field_image->entity->getFileUri());
    }
  }
}
4
Kevin