노드의 field_image에서 이미지 URL 가져 오기


42

그래서 나는이 노드를 가지고 있습니다 :

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)

이제 field_image에는 x-default 및 일부 기본 이미지 데이터가있는 배열이 있습니다. Twig 템플릿 내에서 이미지를 표시하거나 이미지에 대한 링크를 만들려면 어떻게합니까?


확인할 시간이 없지만 url(node.field_image.0.entity.uri)( 관련 문제 ) 처럼 간단 할 수도 있습니다
Clive

@Clive 나는 이것을 시도하고 나 에게이 오류를 준다 : Recoverable fatal error: Object of class Drupal\Core\Field\FieldItemList could not be converted to string 그래서 나는 이것을 시도했다 : url(node.field_image.0.entity.uri.value)그러나 그것은 단지 나에게 이것을 말한다 :Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Route "public://image.png" does not exist.")
Rias

Errr ... 나는 그것이 변환에 나뭇 가지 도우미 함수가 아니라면, 다음 전처리 후크에서 수행해야 할 거라 생각 FieldItemList문자열 표현으로들 (I 찾을 수없는)
클라이브

오, 알 겠어 url()경로를 원해 어때요 url_from_path(node.field_image.0.entity.uri.value)?
Clive

url_from_path()이 이것을 생성 http://mywebsite.local/public%3A//image.png하는 것 같습니다 : 그래서 urlencoding하고 URL에 정확한 값을 추가하는 것 같습니다
Rias

답변:


49

8.0.x 이후이 답변의 업데이트 버전은 다음과 같습니다. @joelpittet 의견을 기반으로 합니다.

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

2
이미지 스타일 별 URL (예 : 미리보기 이미지)이 아닌 "스타일이 지정되지 않은"원본 이미지의 URL이 표시됩니다. VladimirM의 답변 외에도 나뭇 가지에 올바른 스타일의 이미지 URL을 가져올 수있는 방법이 없습니다. 적어도 현재 ...
Philipp Michael

2
... 이미지 스타일은 이제 Twig Tweak-drupal.org/project/twig_tweak
4k4

1
File 클래스는이 url()단순히 호출 할 수 있도록 방법을 entity.url()전달하는 대신 entity.fileurifile_url()
대한 전기 학회

36

Twig에 대해서는 잘 모르지만 $node->field_image->entity->getFileUri()PHP에서 파일 URI를 얻으면 다음 을 호출해야 file_create_url()합니다.

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

나뭇 가지에서 가능한지 모르겠습니다. 가능하지 않은 경우 항상 사전 프로세스에서 계산하여 새 변수로 추가 할 수 있습니다.


2
우리는 file_create_url ()을 핵심으로 만들려고 노력하고 있지만 관심이 부족하여 문제가 오래되었습니다. drupal.org/node/2168231 비록 들어가면 {{file_url (node.field_image.entity.fileuri)}}
joelpittet

26

누군가 스타일 이미지가 필요한 경우 :

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

4
이것은 좋은 대답입니다. 참고는에 있음을 .theme 또는 .module 파일 당신은 정상에이를 추가 할 수 있습니다 :use Drupal\image\Entity\ImageStyle;
mikeDOTexe

2
https와 관련된 문제가 발생하여 Safari가 대신 IP를 사용할 때 이미지가 표시되지 않습니다. $relative = file_url_transform_relative($styled_image_url);상대적인지 확인하기 위해 추가하고 싶을 수도 있습니다 . 여기 API
mikeDOTexe 16:18

9

위의 나뭇 가지 솔루션 중 어느 것도 나를 위해 일하지 않았습니다 (아마도 이전 8.x 버전에서는 작동했지만 8.5 버전에서는 작동하지 않았을 것입니다)

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

참고 : Drupal 8.5 이상에서 작동해야합니다


이런 종류의 것들이 잠시 후에 더 이상 사용되지 않는다는 것이 나쁜 생각입니다. Drupal을 업그레이드하면 계속 작동합니다! 이것은 Drupal 8.6에서 효과적입니다. 감사합니다.
Stef Van Looveren

7

그래서 나는 Clive 의 도움으로 답을 찾았습니다 .

Twig에서 이미지 URI 가져 오기는 다음을 사용하여 수행됩니다. node.field_image.0.entity.uri.value

이미지의 전체 URL 가져 오기는 다음을 사용하여 수행 할 수 있습니다. file_create_url(node.field_image.0.entity.uri.value)

나뭇 가지에서 이것을하는 것은 아직 불가능하지만 그들은 노력하고 있습니다-> 여기를 참조하십시오


6

D8에서 나를 위해 일한 것은 다음과 같습니다.

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

kint($node->get('field_image')->entity)어레이를 사용 하고 살펴보면 매우 도움이되었습니다.

여기에 이미지 설명을 입력하십시오

그런 다음 내 나뭇 가지 파일에서 다음을 사용했습니다.

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

삽입 된 이미지가없고 기본값을 설정 한 경우 어떻게됩니까?
amol


2

나는 항상 도우미 기능을 사용하고 있습니다.

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

다음은 나뭇 가지 템플릿의 모든 이미지 필드에 대해 연결된 이미지 스타일을 가진 이미지 URL을 가져 오려는 방법입니다.

먼저 Twig Tweak 모듈을 설치하십시오

그런 다음 이미지 URI를 변수로 설정하십시오. URI를 사용하면 나뭇 가지 비틀기 패턴을 사용하여 원하는 이미지 스타일로 경로를 얻을 수 있습니다. 아래를보십시오 :

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

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

Twig Tweak v2.4 +는 file_url엔티티에서 파일 URL을 추출하는 필터를 제공합니다 .

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

0

나는 같은 문제가 있었기 때문에 get_image_path()나뭇 가지 기능을 만들어서 상용구 스타터 모듈에 다른 유용한 것들을 추가했습니다.

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

이 함수는 이미지 필드와 이미지 스타일의 컴퓨터 이름을 받아 들인 다음 해당 이미지 경로를 반환합니다.

많은 컨텍스트에서 작동합니다 node.field_name. content.field_name또는을 전달할 수 있습니다 row._entity.field_name( 또는 보기 필드 템플릿의 경우).


0

어쨌든 결과 URL이 작동하지 않는 이유를 찾는 데 실제로 나이가 걸렸습니다. 모든 404'ed. 파생물이없는 경우 먼저 파생물을 작성해야합니다 .

예를 들어 나중에 이미지 스타일을 추가 할 때 원본 이미지가 업로드 된 후에는 스타일이 지정된 이미지 파일이 없습니다 (이미지 파생). 먼저 작성해야합니다.

교체 field_MYIMAGEMYSTYLE당신이 필요로.

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

이것이 자동으로 일어나기를 바랍니다.


0

다소 관련이있는 경우, 미디어 엔티티의 이미지 필드에서 이미지 파일 URL을 가져 오기 위해 내가 사용한 모든 이전 답변 덕분입니다.

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

이제 나뭇 가지 템플릿에서이 변수를 사용할 수 있습니다

{{ media_img_url }}

0

URI, alt, title 등과 같은 이미지 속성을 얻으려면 템플릿과 같은 구문을 현명하게 사용하십시오

노드 잔가지 템플릿에서

{{node.field_name.entity.fileuri}}

필드 나뭇 가지 템플릿

{{content.field_name.entity.fileuri}}

다른 필드 나뭇 가지 템플릿

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

참고 : 나뭇 가지 관련 문제와 관련된 자세한 내용은 twig_tweaks 모듈 치트 시트 를 확인하십시오 .


0

url()File 클래스에 있는 메소드를 바로 가기로 사용할 수 있습니다 .

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

단축 할 수 있습니다 :

{{ node.field_image.entity.url }}

이것은 전처리 기능에서 작동하지만 Twig_Sandbox_SecurityError나뭇 가지 템플릿에서 호출 될 때 트리거합니다 .

수신 Twig_Sandbox_SecurityError하면 urlStackoverflow 게시물에 언급 된대로 귀하의 settings.php 파일에서 나뭇 가지를 허용 할 수 있습니다.

File :: Url ()에 대한 문서를 참조하십시오 https://api.drupal.org/api/drupal/core%21modules%21file%21src%21Entity%21File.php/function/File%3A%3Aurl/8.6.x


-4

두 가지 방법으로 할 수 있습니다!

1) file_create_url (---------) // 내부 노드 경로 쓰기

2) file_url (-------) // 내부는 노드의 경로를 씁니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.