web-gelistirme-sc.com

Resim URL'sini bir düğümdeki bir field_image öğesinden alma

Yani 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ü verileri içeren bir diziye sahiptir. Görüntüyü nasıl gösterebilir veya Twig şablonu içinde görüntüye nasıl bağlantı oluşturabilirim)?

44
Rias

İşte 8.0.x'den sonra bu cevap için bir güncelleme sürümü. Bu temel @ joelpittet yorum.

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

Twig hakkında bilmiyorum, ancak PHP'de $node->field_image->entity->getFileUri() ile dosya URI'sini alıyorsunuz ve bu konuda file_create_url() çağırmanız gerekiyor:

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

Bunun dalda mümkün olup olmadığını bilmiyorum. Mümkün değilse, ön işlemde her zaman hesaplayabilir ve yeni bir değişken olarak ekleyebilirsiniz.

39
Berdir

Birisi tarz bir resme ihtiyaç duyuyorsa:

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

Yukarıdakilerin hiçbiri twig çözümler benim için çalıştı (belki de 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ıdır

11
GiorgosK

Bu yüzden cevabı Clive yardımıyla öğrendim.

Resim URI'sini Twig) almak node.field_image.0.entity.uri.value Kullanılarak yapılır

Resmin tam URL'sini almak file_create_url(node.field_image.0.entity.uri.value) kullanılarak yapılabilir

Bunu Twig) yapmak henüz mümkün değil, ancak üzerinde çalışıyorlar -> buraya bakın

7
Rias

D8'de benim için çalıştığım şey:

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

kint($node->get('field_image')->entity) kullanılması ve diziye bakılması çok yardımcı oldu

enter image description here

Sonra benim twig dosya kullandım:

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

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

İlk önce Twig Tweak modülünü yükleyin

Ardından görüntü URI'sını değişken olarak ayarlayın. URI ile, istediğiniz görüntü stilini içeren yolu elde etmek için bir twig ince ayar deseni kullanabilirsiniz. Aşağıya bakın:

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

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

Twig Tweak v2.4 + teklifler file_url filtresi bir varlıktan dosya URL'sini çıkarmak için.

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

uRL'yi doğrudan field_image.entity.url adresini kullanarak alabilirsiniz

2
Adrian Kremer

Her zaman bir 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());
    }
  }
2
hugronaphor

File sınıfında bulunan url() yöntemini kısayol olarak kullanabilirsiniz, böylece:

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

kısaltılabilir:

{{ node.field_image.entity.url }}

Bu önişleme işlevlerinde çalışır, ancak bir Twig_Sandbox_SecurityError twig şablonunda çağrıldığında).

Twig_Sandbox_SecurityError twig url öğesinin settings.php dosyanızda bu Stackoverflow yayını

Dosya :: Url () https: //api.drupal.org/api/drupal/core%21modules%21file%21src%21Entity%21File.php/function/File%3A%3Aurl/8.6 üzerindeki belgelere bakın .x

0
Kiee

Ben de aynı sorunu vardı, bu yüzden bir get_image_path() Twig işlevi oluşturdu ve diğer yararlı şeyler bir grup ile benim ortak yazı tipi modül ekledi:

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

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

Birçok bağlamda çalışır - node.field_name, content.field_name veya row._entity.field_name (Görünüm alanları şablonu söz konusu olduğunda).

0
user34185

biraz ilgili, burada bir medya varlığının görüntü alanından bir görüntü dosyası URL'si dal almak için kullandığım (beni oraya götürmek için ö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 twig şablonumda kullanabilirim)

{{ media_img_url }}
0
bdanin

Tanrım, sonuçta ortaya çıkan URL'lerimin neden işe yaramadığını öğrenmek yaşımı aldı. 404'lerin hepsi. Önceden yoksa 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 stilize edilmiş bir görüntü dosyası yoktur (görüntü türevi). İlk önce oluşturulması gerekir.

Değiştir field_MYIMAGE ve MYSTYLE istediğiniz gibi.

$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 dilerdim.

0
leymannx