it-swarm-vi.com

Lấy URL hình ảnh từ một trường_image trên một nút

Vì vậy, tôi có nút này:

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)

Bây giờ field_image có một mảng với x-default và một số dữ liệu hình ảnh cơ bản. Làm cách nào để hiển thị hình ảnh hoặc tạo liên kết đến hình ảnh bên trong mẫu Twig?

44
Rias

Đây là phiên bản cập nhật cho câu trả lời này sau 8.0.x. Căn cứ này dựa trên @ joelpittet bình luận.

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

Tôi không biết về Twig, nhưng bạn nhận được tệp URI với $node->field_image->entity->getFileUri() trong PHP và bạn cần gọi file_create_url() trên đó:

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

Tôi không biết nếu điều đó là có thể trong twig. Nếu không thể, bạn luôn có thể tính toán nó trong quá trình tiền xử lý và thêm dưới dạng một biến mới.

39
Berdir

Nếu ai đó cần một hình ảnh theo kiểu:

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

Không có giải pháp nào ở trên twig làm việc cho tôi (có lẽ những giải pháp này hoạt động cho các phiên bản 8.x cũ hơn nhưng không phải cho phiên bản 8.5

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

LƯU Ý: nên hoạt động cho Drupal 8,5 +

11
GiorgosK

Vì vậy, tôi đã tìm ra câu trả lời với sự giúp đỡ của Clive .

Lấy URI hình ảnh trong Twig được thực hiện bằng node.field_image.0.entity.uri.value

Có thể lấy URL đầy đủ cho hình ảnh bằng cách sử dụng file_create_url(node.field_image.0.entity.uri.value)

Làm điều này trong Twig chưa thể nhưng họ đang làm việc với nó -> xem tại đây

7
Rias

Điều cuối cùng làm việc cho tôi trong D8 là:

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

Sử dụng kint($node->get('field_image')->entity) và xem qua mảng rất hữu ích

enter image description here

Sau đó, trong tập tin twig của tôi, tôi đã sử dụng:

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

Đây là cách nếu bạn muốn lấy URL hình ảnh với kiểu hình ảnh được liên kết cho bất kỳ trường hình ảnh nào trong mẫu twig:

Đầu tiên cài đặt mô-đun Twig Tweak

Sau đó đặt URI hình ảnh làm biến. Với URI, bạn có thể sử dụng mẫu twig điều chỉnh mẫu để có đường dẫn với bất kỳ kiểu hình ảnh nào bạn muốn. Xem bên dưới:

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

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

Twig Tweak v2.4 + cung cấp file_url bộ lọc để trích xuất URL tệp từ một thực thể.

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

bạn có thể lấy url trực tiếp bằng cách sử dụng field_image.entity.url

2
Adrian Kremer

Tôi luôn sử dụng chức năng trợ giúp

  /**
   * 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

Bạn có thể sử dụng phương thức url() trên lớp File làm lối tắt:

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

có thể rút ngắn thành:

{{ node.field_image.entity.url }}

Điều này hoạt động trong các chức năng tiền xử lý nhưng kích hoạt một Twig_Sandbox_SecurityError khi được gọi trong mẫu twig.

Nếu bạn nhận được Twig_Sandbox_SecurityError bạn có thể nói twig để cho phép url trong tệp settings.php của bạn như được đề cập trong này bài đăng Stackoverflow

Xem tài liệu về Tệp :: Url () https://api.drupal.org/api/drupal/core%21modules%21file%21src%21Entity%21File.php/feft/File%3A%3Aurl/8.6 .x

0
Kiee

Để lấy thuộc tính hình ảnh như URI, alt, title, v.v ... hãy sử dụng cú pháp như mẫu dưới đây

Trong nút twig mẫu

{{node.field_name.entity.fileuri}}

Trong trường twig mẫu

{{content.field_name.entity.fileuri}}

Trong trường khác twig mẫu

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

Lưu ý: Đồng thời kiểm tra twig_tweaks module cheat sheet để biết chi tiết liên quan đến twig vấn đề liên quan.

0
Prem Patel

Tôi có cùng một vấn đề, vì vậy tôi đã tạo một hàm get_image_path() Twig và thêm nó với một loạt các công cụ hữu ích khác vào mô-đun Starter khởi động của tôi:

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

Hàm chấp nhận trường hình ảnh và tên máy của một kiểu hình ảnh, sau đó trả về đường dẫn hình ảnh đó.

Nó hoạt động trong nhiều bối cảnh - bạn có thể vượt qua node.field_name, content.field_name hoặc là row._entity.field_name (trong trường hợp mẫu Xem trường).

0
user34185

có phần liên quan, đây là những gì tôi đã sử dụng (nhờ tất cả các câu trả lời trước để đưa tôi đến đó) để lấy URL tệp hình ảnh từ trường hình ảnh của thực thể phương tiện trong twig:

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

bây giờ tôi có thể sử dụng biến này trong mẫu twig của tôi

{{ media_img_url }}
0
bdanin

Trời ạ, thực sự phải mất nhiều thời gian để tìm hiểu lý do tại sao các URL kết quả của tôi không hoạt động. Tất cả 404'ed. Trước tiên, bạn cần tạo đạo hàm nếu nó chưa tồn tại.

Vì vậy, ví dụ khi bạn thêm một kiểu hình ảnh sau đó, sau khi hình ảnh gốc được tải lên, thì vẫn chưa có tệp hình ảnh được tạo kiểu nào (hình ảnh phái sinh). Nó cần phải được tạo ra đầu tiên.

Thay thế field_MYIMAGEMYSTYLE khi bạn cần.

$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);

Tôi ước điều này sẽ tự động xảy ra.

0
leymannx