it-swarm.com.de

Wie finde ich eine URL im Bildstil in der Vorlage twig?)?

Ich implementiere eine Knotenvorlage, die ein Bild zweimal verwendet. einmal auf "normale" Weise (d. h. unter Verwendung des in der Anzeigekonfiguration des Felds für diesen Ansichtsmodus definierten Bildstils) und andererseits als CSS-Hintergrundbildeigenschaft.

Ich brauche eines von zwei Dingen:

  1. (idealerweise) eine Möglichkeit, die URL für einen anderen Bildstil desselben Bildes abzurufen.

  2. eine Möglichkeit, die URL für das Bildfeld abzurufen.

Ich habe Probleme, dump() und kint() zu verwenden, um mir eine Antwort zu geben. Beide geben viel zu viel aus (dank eingebetteter Links zu "Eltern" usw.) und scheinen nicht die Informationen zu haben, die ich brauche. z.B. Wenn Sie sich die Ausgabe von dump(content.field_image) ansehen, ist die tatsächliche URL des Bildes nicht vorhanden (woher kommt sie also, sodass sie mit {{ content.field_image }} gerendert werden kann?!). kint() stirbt dagegen vollständig, wenn ich ein Argument an sie übergebe und die Top-Level-Version wieder viel zu groß ist, um zu navigieren. Das Debuggen war mit phptemplate + xdebug so viel einfacher. (Ja, ich weiß, dass es gut ist, dass Themen die Datenbank nicht löschen können.)

Es gibt eine Antwort auf (1), die impliziert Sie können es nicht tun , aber ich verstehe nicht, warum ich die vorhandene URL in (2) nicht erhalten kann?

9
artfulrobot

Sie können die URL des Bildstils in einer Vorverarbeitungsfunktion abrufen und an die Knotenvorlage übergeben. (In meinem Fall brauchte ich auf Seitenebene, ich vermute, das würde immer noch für Knoten funktionieren)

In etwa so: "myimagefield" ist der Computername für Ihr Bildfeld und "myimagestyle" ist der Computername für Ihren Stil. Stellen Sie außerdem sicher, dass Sie Entity\ImageStyle einschließen.

use Drupal\image\Entity\ImageStyle;

/**
 * Implements hook_preprocess_page().
*/
function mytheme_preprocess_page(&$variables, $hook) {
  if ($variables['node']) {
    $node = $variables['node'];
    if($node->myimagefield[0]){
        $cover_image = $node->myimagefield[0]->entity->getFileUri();
        $image_url = ImageStyle::load('myimagestyle')->buildUrl($cover_image);
        $variables['my_image'] = $image_url;
    }
  }
}
10
Greg

Der erste Teil ist bereits in der verknüpften Frage beantwortet, wo es den Code gibt, wie das geht. Um den zweiten Teil der Frage zu beantworten, können Sie auf das Originalbild im Knotenobjekt zugreifen:

{{ file_url(node.field_image.entity.uri.value) }}

Eine Bemerkung zu content:

In einer Knotenvorlage kann das Bildfeld in content nicht gerendert werden. Das Feld enthält die Konfiguration, wie es angezeigt werden soll, und das Feldobjekt, das alle Rohdaten enthält. Später wird dies im Feld, Bildformatierer und Bildvorlagen zusammengestellt. Aus diesem Grund finden Sie die gesuchte URL derzeit nicht in content.

In der Knotenvorlage können Sie die Felder auf der obersten Ebene des Inhaltsarrays verwenden, z. B. das Bildfeld anzeigen

{{ content.field_image }}

wie im Ansichtsmodus konfiguriert.

Bearbeiten:

Es gibt einen neuen Filter im Modul Twig Tweak . Jetzt können Sie die Bildstil-URL in twig direkt aus einer URL oder URL des Originalbilds generieren:

{{ node.field_image.entity.uri.value | image_style('thumbnail') }} 
12
4k4

Installieren Sie das Twig Tweak Module https://www.drupal.org/project/twig_Tweak

Und dieses Modul Twig Field https://www.drupal.org/project/twig_field_value

Wenn Sie reguläre Bild-Upload-Feldbilder verwenden, verwenden Sie diese in Ihrer Knotenvorlage:

<img src="{{ node.field_regular_image.entity.uri.value | image_style('thumbnail') }} " >

Wenn Sie ein Entitätsreferenzbild verwenden, verwenden Sie Folgendes:

<img src="{{ file_url(content.field_global_image|field_target_entity.image.entity.uri.value | image_style('thumbnail'))}} " >
6
paulcap1