Возвращение глубоко вложенной переменной поля в Drupal 8 - PullRequest
0 голосов
/ 04 марта 2019

Последние несколько часов я пытался решить эту проблему, но не приблизился к решению.Я пытаюсь вернуть строковое значение для целевого атрибута ссылки внутри шаблона абзаца D8:

enter image description here

Когда я делаю дамп переменной наполе, используя имя машины (field_link_cta), выполняя следующие действия:

{{ dump(content.field_link_cta['#items'].getValue()) }} Я получаю возвращаемые значения:

enter image description here

Я могуПройдите переменные, чтобы вернуть заголовок, но по какой-то причине не можете добраться до атрибутов ссылки?

{{ content.field_link_cta[0]['#title'] }} - Работает, возвращает значение.

{{ content.field_link_cta[0]['#options']['#attributes']['#target'] }} - Не работает, не возвращает значения.

Что мне здесь не хватает?Учитывая, что я прошел через переменные, перечисленные в дампе переменной, разве не должна возвращаться строка атрибута 'target', точно так же как заголовок?Есть ли лучший способ проверки контекста здесь для этой переменной?

Буду признателен за любые указатели.

Спасибо за вашу помощь!

Марк.

1 Ответ

0 голосов
/ 05 марта 2019

Существует два варианта:

Вариант 1 (лучше):

{{ content.field_link_cta.0['#options']['attributes']['target'] }}

Вариант 2:

{{ content.field_link_cta['#items'].getValue().0['options']['attributes']['target']) }}

Объяснение:

Высделал {{ dump(content.field_link_cta['#items'].getValue()) }}, и вы можете видеть, что атрибуты параметров и ключи целевого массива не имеют #.Однако вы никогда не использовали эту опцию (вариант 2), за исключением дампа.

Было бы лучше сделать {{ dump(content.field_link_cta[0]) }}, и вы бы увидели другой дамп, что-то вроде:

array (size=4)
  '#type' => string 'link' (length=4)
  '#title' => string 'link/text' (length=9)
  '#options' => 
    array (size=1)
      'attributes' => 
        array (size=3)
          'target' => string '_blank' (length=6)
          'rel' => string 'rel' (length=3)
          'class' => 
            array (size=1)
              ...

Здесь ясно, что ключ массива заголовков имеет #, и именно поэтому{{ content.field_link_cta[0]['#title'] }} работает.

Атрибуты и ключи целевого массива не имеют #, и поэтому {{ content.field_link_cta[0]['#options']['#attributes']['#target'] }} не работает, и правильный код будет тот, который отображается в «Варианте 1».

...