Получение URL-адреса изображения из поля field_image на узле

Итак, у меня есть этот узел:

 object (Drupal \ node \ Entity \ Node) [1862]
  protected 'values' =>
    array (size = 17)
      'vid' =>
        array (size = 1)
          'x-default' => строка '7' (длина = 1)
      'langcode' =>
        array (size = 1)
          'x-default' =>
            array (size = 1)
              0 =>
                array (size = 1)
                  'value' => string 'en' (length = 2)
      ... (больше полей)
      'field_image' =>
        array (size = 1)
          'x-default' =>
            array (size = 1)
              0 =>
                array (size = 5)
                  'target_id' => строка '1' (длина = 1)
                  'alt' => string '' (length = 0)
                  'title' => string '' (length = 0)
                  'width' => строка '150' (длина = 3)
                  'height' => строка '120' (длина = 3)

Теперь у field_image есть массив с x-умолчанию и некоторые базовые данные изображения. Как показать изображение или создать ссылку на изображение внутри шаблона Twig?

36 голосов | спросил Rias 19 32014vEurope/Moscow11bEurope/MoscowWed, 19 Nov 2014 02:13:27 +0300 2014, 02:13:27

14 ответов


38

Вот версия обновления для этого ответа после 8.0.x. Эта база в комментариях @joelpittet .

{{file_url (node.field_image.entity.fileuri)}}
ответил darol100 22 TueEurope/Moscow2015-12-22T05:20:47+03:00Europe/Moscow12bEurope/MoscowTue, 22 Dec 2015 05:20:47 +0300 2015, 05:20:47
26

Я не знаю о Twig, но вы получаете URI файла с $ node-> field_image-> entity-> getFileUri () в PHP, и вам нужно позвонить file_create_url ():

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

Я не знаю, возможно ли это в ветке, если нет, тогда вы всегда можете вычислить его в препроцессе и добавить в качестве новой переменной.

ответил Berdir 20 42014vEurope/Moscow11bEurope/MoscowThu, 20 Nov 2014 00:09:43 +0300 2014, 00:09:43
18

Если кому-то понадобилось стилизованное изображение:

$ styled_image_url = ImageStyle :: load ('large') -> buildUrl ($ node-> field_image-> entity-> getFileUri ());
ответил VladimirM 12 Maypm16 2016, 14:02:59
5

Итак, я нашел ответ с помощью Клайва .

Получение URI изображения в Twig выполняется с использованием node.field_image.0.entity.uri.value

Получение полного URL-адреса для изображения можно выполнить с помощью file_create_url (node.field_image.0.entity.uri.value)

Выполнение этого в Twig пока невозможно, но они работают над ним -> см. здесь

ответил Rias 20 42014vEurope/Moscow11bEurope/MoscowThu, 20 Nov 2014 18:37:12 +0300 2014, 18:37:12
3

В итоге я работал в D8:

$ imageUrl = $ node-> get ('field_image') -> entity-> uri-> значение;

Использование kint ($ node-> get ('field_image') -> entity) и просмотр массива был очень полезным

 введите описание изображения здесь>> </a> </p>

<p> Затем в моем файле twig я использовал: </p>

<pre><code><img class =

ответил crobicha 5 PM000000100000000531 2016, 22:12:05
2

вы можете получить url напрямую, используя field_image.entity.url

ответил Adrian Kremer 30 Jpm1000000pmFri, 30 Jan 2015 16:37:53 +030015 2015, 16:37:53
1

У меня была такая же проблема, поэтому я создал функцию get_image_path () Twig и добавила ее вместе с кучей других полезных материалов в мой шаблонный модуль Starter:

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

Функция принимает поле изображения и имя машины стиля изображения, а затем возвращает путь к изображению.

Он работает во множестве контекстов: вы можете передать node.field_name, content.field_name или row._entity.field_name (в шаблон шаблона View).

ответил BrynJ 1 MarpmWed, 01 Mar 2017 14:18:35 +03002017-03-01T14:18:35+03:0002 2017, 14:18:35
1

Я всегда использую вспомогательную функцию

/**
   * Получить URI изображения.
   *
   * @param \ Drupal \ Core \ Entity \ Entity $ entity
   * @param $ fieldName
   * @param bool $ imageStyle
   * @второйный смешанный
   * /
  public function getImageUri (\ Drupal \ Core \ Entity \ Entity $ entity, $ fieldName, $ imageStyle = FALSE) {
    $ imageField = $ entity-> get ($ fieldName) -> getValue ();
    if (! empty ($ imageField [0] ['target_id'])) {
      $ file = Файл :: load ($ imageField [0] ['target_id']);
      if ($ imageStyle) {
        return ImageStyle :: load ($ imageStyle) -> buildUrl ($ file-> getFileUri ());
      }

      //Исходный URI.
      return file_create_url ($ file-> getFileUri ());
    }
  }
ответил hugronaphor 16 Maypm18 2018, 22:53:05
0

Гош, мне действительно потребовалось время, чтобы узнать, почему мои результирующие URL-адреса не работают. Все 404-е. Сначала вам нужно создать деривацию, если она еще не существует .

Так, например, когда вы добавляете стиль изображения позже, после того, как исходное изображение было загружено, тогда еще нет файла стиля в стиле (деривация изображения). Сначала его нужно создать.

Замените field_MYIMAGE и MYSTYLE, как вам нужно.

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

Я бы хотел, чтобы это произошло автоматически.

ответил leymannx 20 PMpFri, 20 Apr 2018 14:06:18 +030006Friday 2018, 14:06:18
0

несколько связанный, вот что я использовал (спасибо всем предыдущим ответам, чтобы получить меня там), чтобы получить URL-адрес файла изображения из поля изображения медиа-объекта в ветке:

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

теперь я могу использовать эту переменную в шаблоне ветки

{{media_img_url}}
ответил bdanin 3 Mayam18 2018, 00:34:27
0

Таким образом, если вы хотите получить URL-адрес изображения со связанным стилем изображения для любого поля изображения в шаблоне ветви:

Сначала установите модуль twig_tweaks

Затем установите образ uri как переменную. С помощью uri вы можете использовать шаблон twig tweaks, чтобы получить путь с любым желаемым стилем изображения. См. Ниже:

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

<img src = "{{image_uri | image_style ('image1200x1103')}}">
ответил Robb Davis 22 Maypm18 2018, 23:33:15
0

Чтобы получить атрибут изображения, такой как URI, alt, title и т. д., используйте синтаксис, например, ниже шаблона wise

В шаблоне ветви узла

{{node.field_name.entity.fileuri}}

В шаблоне ветви поля

{{content.field_name.entity.fileuri}}

В другом шаблоне ветви поля

{{элемент [ '# объект']. Field_name.entity.fileuri}}

Примечание. Также проверьте модуль twig_tweaks обмануть лист для подробностей, связанных с связанной с веткой проблемой.

ответил Prem Patel 31 Maypm18 2018, 21:00:52
0

Ни один из вышеперечисленных решений для twig не работал для меня (возможно, они работали для более старых версий 8.x, но не для версии 8.5

{{file_url (node.field_image ['# items']. entity.uri.value)}}
ответил GiorgosK 31 J000000Tuesday18 2018, 10:45:28
-3

Вы можете сделать это двумя способами!

1) file_create_url (---------) //внутри записываем путь узла

2) file_url (-------) //внутри записываем путь узла

ответил Drock 12 Maypm16 2016, 15:21:13

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132