Resmin URL'sini bir düğümdeki field_image'den alma


42

Bu yüzden bu Düğüm var:

object(Drupal\node\Entity\Node)[1862]
  protected 'values' => 
    array (size=17)
      'vid' => 
        array (size=1)
          'x-default' => string '7' (length=1)
      'langcode' => 
        array (size=1)
          'x-default' => 
            array (size=1)
              0 => 
                array (size=1)
                  'value' => string 'en' (length=2)
      ... (more fields)
      'field_image' => 
        array (size=1)
          'x-default' => 
            array (size=1)
              0 => 
                array (size=5)
                  'target_id' => string '1' (length=1)
                  'alt' => string '' (length=0)
                  'title' => string '' (length=0)
                  'width' => string '150' (length=3)
                  'height' => string '120' (length=3)

Şimdi field_image, x-default ve bazı temel görüntü verilerinin bulunduğu bir diziye sahiptir. Görüntüyü nasıl gösteririm veya Twig şablonunun içindeki görüntünün bağlantısını nasıl oluştururum?


Kontrol etmek için zamanınız yok, ama belki de basit url(node.field_image.0.entity.uri)( ilgili konu )
Clive

@Clive Bunu denedim ve bana bu hatayı verdi: Recoverable fatal error: Object of class Drupal\Core\Field\FieldItemList could not be converted to string bu yüzden bununla denedim: url(node.field_image.0.entity.uri.value)ama sonra bana şunu söyledi:Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Route "public://image.png" does not exist.")
Rias

Errr ... S'yi FieldItemListbir dizge gösterime dönüştürecek bir Twig yardımcı işlevi yoksa (bulamıyorum)
Clive

Oh anlıyorum, url()bir rota istiyor. Ne dersiniz url_from_path(node.field_image.0.entity.uri.value)?
Clive

Hmm url_from_path()bunu yaratıyor gibi görünüyor: http://mywebsite.local/public%3A//image.pngbu yüzden urlencoding ve url'ye tam bir değer ekliyor gibi görünüyor
Rias

Yanıtlar:


49

İşte bu cevabın 8.0.x’ten sonraki versiyonunun güncellenmesi. Bu temel @joelpittet yorumunda.

{{ file_url(node.field_image.entity.fileuri) }}

2
Lütfen, "stilsiz" orijinal görüntünün URL'sini ve resim stiline özgü URL adresini (ör. Küçük resim) almazsınız. VladimirM'in cevabından başka, dalda doğru stilli resim url'sini almanın bir yolu yoktur. En azından şu anda ...
Philipp Michael

2
... görüntü stilleri Twig twea mevcuttur - drupal.org/project/twig_tweak
4k4

1
File sınıfı bir sahiptir url()sadece çağrı böylece, yöntem entity.url()aktarmak yerine entity.fileurikadarfile_url()
Kiee

36

Twig'i bilmiyorum, ama $node->field_image->entity->getFileUri()PHP'de URI dosyasını buluyorsunuz ve bu konuda konuşmanız gerekiyor file_create_url():

file_create_url($node->field_image->entity->getFileUri())

Dalda bunun mümkün olup olmadığını bilmiyorum. Bu mümkün değilse, önişlemede her zaman hesaplayabilir ve yeni bir değişken olarak ekleyebilirsiniz.


2
File_create_url () işlevini çekirdeğe dönüştürmeye çalışıyoruz, ancak ilgisizliğin olması sorunu geçersiz kılıyor. drupal.org/node/2168231 Eğer girdiyse, {{file_url (node.field_image.entity.fileuri)}} olmalıdır
joelpittet

26

Birinin tarz görüntüye ihtiyacı varsa:

$styled_image_url = ImageStyle::load('large')->buildUrl($node->field_image->entity->getFileUri());

4
Bu harika bir cevap. Not senin o .theme veya .module dosyaya Üstüne bu eklemek isteyeceksiniz:use Drupal\image\Entity\ImageStyle;
mikeDOTexe

2
Https ile ilgili bir sorunla karşılaştım, burada Safari görüntüyü IP kullanırken kullanmıyor. $relative = file_url_transform_relative($styled_image_url);Göreceli olduğundan emin olmak için eklemek isteyebilirsiniz . Buradaki API
mikeDOTexe 18:16

9

Yukarıdaki dal çözümlerinin hiçbiri benim için işe yaramadı (belki daha eski 8.x sürümleri için çalıştı, ancak 8.5 sürümü için değil)

{{ file_url(node.field_image['#items'].entity.uri.value) }}

NOT: Drupal 8.5+ için çalışıyor olmalı


Bir süre sonra bu tür şeylerin kullanımdan kaldırılmasının kötü olduğunu düşünüyorum. Yükseltme Drupal, çalışanlarını sürdürmeli! Bu benim için Drupal 8.6'da çalışıyor, teşekkürler.
Stef Van Looveren

7

Bu yüzden cevabı Clive'nin yardımıyla buldum .

Twig'de görüntü URI'sinin alınması kullanılarak yapılır. node.field_image.0.entity.uri.value

Resmin tam URL’sini almak, file_create_url(node.field_image.0.entity.uri.value)

Bunu Twig'de yapmak mümkün değil, ama üzerinde çalışıyorlar -> buraya bakın


6

D8'de benim için çalışmamın sonu:

$imageUrl = $node->get('field_image')->entity->uri->value;

kint($node->get('field_image')->entity)Diziyi kullanarak ve bakarak çok yardımcı oldu

görüntü tanımını buraya girin

Sonra benim dal dosyamda kullandım:

<img class="top-article-image" src="{{ file_url(imageUrl) }}" />

Resim eklenmediyse ve varsayılan değeri ayarladıysak.
amol


2

Her zaman yardımcı işlev kullanıyorum

  /**
   * Get the Image URI.
   *
   * @param \Drupal\Core\Entity\Entity $entity
   * @param $fieldName
   * @param bool $imageStyle
   * @return mixed
   */
  public function getImageUri(\Drupal\Core\Entity\Entity $entity, $fieldName, $imageStyle = FALSE) {
    $imageField = $entity->get($fieldName)->getValue();
    if (!empty($imageField[0]['target_id'])) {
      $file = File::load($imageField[0]['target_id']);
      if ($imageStyle) {
        return ImageStyle::load($imageStyle)->buildUrl($file->getFileUri());
      }

      // Original URI.
      return file_create_url($file->getFileUri());
    }
  }

1

Bir twig şablonundaki herhangi bir resim alanı için resim URL'sini, ilişkili resim stiliyle ilişkilendirilmiş resim stilini almak istiyorsanız bu:

Önce Twig Tweak modülünü kurun

Sonra görüntü URI'sini değişken olarak ayarlayın. URI ile, istediğiniz görüntü stiline sahip olan yolu bulmak için bir dal tweaks deseni kullanabilirsiniz. Aşağıya bakınız:

{% set image_uri = content.field_feature_row_image['#items'].entity.uri.value %}

<img src="{{ image_uri|image_style('image1200x1103') }}"/>

Twig Tweak v2.4 +, bir file_urlURL'den dosya URL'sini çıkarmak için filtre sunar .

<img src="{{ node.field_image|file_url|image_style('image1200x1103') }}"/>

0

Aynı sorunu yaşamaya başladım, bu yüzden bir get_image_path()Twig işlevi yarattım ve bunu kazan plakası Starter modülüme bir sürü faydalı şeyle ekledim:

https://github.com/brynj-digital/starter

İşlev, resim alanını ve resim stilinin makine adını kabul eder ve ardından bu resim yolunu döndürür.

Bu bağlamlarda bir sürü çalışır - geçebilir node.field_name, content.field_nameya da row._entity.field_name(bir Görünüm alanları şablona durumunda).


0

Tanrım, sonuçta ortaya çıkan URL'lerin neden işe yaramadığını öğrenmek benim yaşımı aldı. 404'lerin hepsi. Eğer önceden mevcut değilse, önce bir türev oluşturmanız gerekir .

Örneğin, daha sonra bir görüntü stili eklediğinizde, orijinal görüntü yüklendikten sonra, henüz stilli bir görüntü dosyası yok (görüntü türetilir). İlk önce yaratılması gerekiyor.

Değiştir field_MYIMAGEve MYSTYLEistediğiniz kadar.

$original_image = $node->field_MYIMAGE->entity->getFileUri();
$style = \Drupal::entityTypeManager()->getStorage('image_style')->load('MYSTYLE');

$destination = $style->buildUri($original_image);
if (!file_exists($destination)) {
  $style->createDerivative($original_image, $destination);
}

$url = $style->buildUrl($original_image);

Bunun otomatik olarak gerçekleşmesini diliyorum.


0

biraz ilgili, işte bir medya kuruluşunun görüntü alanından bir görüntü dosyası URL'si almak için kullandığım (beni oraya götüren önceki tüm cevaplar sayesinde):

{% set media_img_url = file_url(content.field_media_image.0['#item'].entity.uri.value) %}

Şimdi bu değişkeni dal şablonumda kullanabilirim

{{ media_img_url }}

0

URI, alt, title vb. Gibi resim özniteliklerini elde etmek için, aşağıdaki gibi bilgiyi kullanın.

Düğüm dal şablonunda

{{node.field_name.entity.fileuri}}

Alan dal şablonunda

{{content.field_name.entity.fileuri}}

Diğer alan dal şablonunda

{{element['#object'].field_name.entity.fileuri}}

Not: Ayrıca, dalla ilgili sorunla ilgili ayrıntılı bilgi için twig_tweaks modül hile sayfasını kontrol edin .


0

Sen kullanabilirsiniz url()böylece kısayol olarak dosya sınıf üzerinde olduğunu yöntemi:

{{ file_url(node.field_image.entity.fileuri) }}

kısaltılabilir:

{{ node.field_image.entity.url }}

Bu, önişleme işlevlerinde çalışır, ancak Twig_Sandbox_SecurityErrorbir dal şablonunda çağrıldığında a'yı tetikler .

Aldığınızda , bu Stackoverflow yazısında belirtildiği gibi settings.php dosyanızda Twig_Sandbox_SecurityErrorizin vermesi urliçin dal bilgisini verebilirsiniz

File :: Url () https://api.drupal.org/api/drupal/core%21modules%21file%21src%21Entity%21File.php/function/File%3A%3Aurl/8.6.x


-4

İki şekilde yapabilirsin!

1) file_create_url (---------) // içinde düğümün yolunu yazın

2) file_url (-------) // içinde düğümün yolunu yaz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.