Подскажите: как вычленить переменную из набора в Twig?

Главные вкладки

Аватар пользователя VasyOK VasyOK 5 сентября 2022 в 10:09

Снова приветствую специалистов по высокоуровнему бекенду!

Есть код:

{%
  set attach = {
    id: id,
    attributes: {
      alt: [
        'alt',
        'description',
      ],
      title: [
        'title',
      ],
    },
  }
%}

<img src="{{ url }}"{{ attributes }} data-insert-attach='{{ attach|json_encode() }}'/>

Выводит:
<img src="/path/to/image.jpg" data-insert-attach="{&quot;id&quot;:&quot;b33e90ec-b96d-4fd4-97da-fe50d13ed8bd&quot;,&quot;attributes&quot;:{&quot;alt&quot;:[&quot;alt&quot;,&quot;description&quot;],&quot;title&quot;:[&quot;title&quot;]}}" alt="Альтернативный текст" title="Заголовок изображения">

Подскажите: как в теге img вывести только title? Без alt. А data-insert-attach вообще убрать.

Если правильно понимаю title нужно как-то вычленить из набора attach.

Комментарии

Аватар пользователя OldWarrior OldWarrior 5 сентября 2022 в 11:31

VasyOK wrote: Если правильно понимаю title нужно как-то вычленить из набора attach

Скорее из {{ attributes }}. Возможно, как-то так:

... title={{ attributes.title }} ...

Аватар пользователя VasyOK VasyOK 5 сентября 2022 в 12:24

Так? Не работает Sad

{%
  set attach = {
    id: id,
    attributes: {
      alt: [
        'alt',
        'description',
      ],
      title: [
        'title',
      ],
    },
  }
%}

{% set title = {{ attributes.title }} %}

Так тоже
{% set title = attributes.title %}

Аватар пользователя VasyOK VasyOK 5 сентября 2022 в 13:33

Не получается.

Тут еще такое дело. Если конструкцию
<img src="{{ url }}"{{ attributes }} data-insert-attach='{{ attach|json_encode() }}'/>

Привести к виду:
<img src="{{ url }}"{{ attributes }}/>

Выводится:

без всяких alt и title.

Аватар пользователя OldWarrior OldWarrior 5 сентября 2022 в 13:46

Это, видимо, уже какая-то химия модуля insert. Что-то он скорее всего заменяет на основании JSON-данных (атрибут data-insert-attach). Но проблема в том, что в этих данных передаются только названия атрибутов, а не их значения. То есть, как минимум второе условие задачи ("А data-insert-attach вообще убрать.") невыполнимо.

Пробовали выкинуть из массива {{ attach }} лишние элементы? То бишь, ветку 'alt' полностью?

Аватар пользователя madt madt 5 сентября 2022 в 22:42

Так?

{% set id = "some_id" %}
{% set url = "/some/url" %}
{%
  set attach = {
    id: id,
    attributes: {
      alt: [
        'alt',
        'description',
      ],
      title: [
        'title',
      ],
    },
  }
%}
<img src="{{ url }}" title="{{ attach.attributes.title.0 }}"/>

https://twigfiddle.com/rdyltj

Аватар пользователя madt madt 6 сентября 2022 в 0:20

У тебя в свойстве/ключе title указано значение «title», поэтому оно выводится.

Вот, к примеру, если изменить значения свойств/ключей:

{% set id = "some_id" %}
{% set url = "/some/url" %}
{%
  set attach = {
    id: id,
    attributes: {
      alt: [
        'some alt for this image',
        'description',
      ],
      title: [
        'some title for this image',
      ],
    },
  }
%}
<img src="{{ url }}" alt="{{ attach.attributes.alt.0 }}" title="{{ attach.attributes.title.0 }}"/>

Результат будет такой:

<img src="/some/url" alt="some alt for this image" title="some title for this image"/>

Или у тебя там тоже переменная в title?

Аватар пользователя VasyOK VasyOK 6 сентября 2022 в 2:11

Немного перефразирую вопрос.

Если выводится так:

{%
  set attach = {
    id: id,
    attributes: {
      alt: [
        'alt',
        'description',
      ],
      title: [
        'title',
      ],
    },
  }
%}

<img src="{{ url }}" data-insert-attach='{{ attach|json_encode() }}'/>

Выводится:
<img src="/path/to/image.jpg" data-insert-attach="{&quot;id&quot;:&quot;b33e90ec-b96d-4fd4-97da-fe50d13ed8bd&quot;,&quot;attributes&quot;:{&quot;alt&quot;:[&quot;alt&quot;,&quot;description&quot;],&quot;title&quot;:[&quot;title&quot;]}}" alt="Альтернативный текст" title="Заголовок изображения">

Без data-insert-attach как ни пытался ни alt ни title не выведу.

Т.е. несмотря на то, что
alt и title определены в attach,
alt="Альтернативный текст" title="Заголовок изображения" - подтягиваются из вводимых значений поля.

Да, скорей всего я ошибся думая, что можно переменную вычленить и тут действительно внутренняя кухня модуля insert
https://www.drupal.org/docs/contributed-modules/insert/synchronizing-tex...