web-dev-qa-db-ja.com

テーマのリンクフィールド、URL値の取得

フィールドテンプレートレベルから、リンクフィールドのURL値を取得して、このテーマのテーマを設定するにはどうすればよいですか?このフィールドのオーバーライドされたフィールドテンプレートは次のとおりです。

{% for item in items %}
    {%
      set classes = [
        'btn',
        (loop.index0 == 0) ? 'btn--primary' : 'btn--inverted'
      ]
    %}

    <a href="{{ item.content['#uri'] }}" class="{{ classes|join(' ') }}">{{ item.content['#title'] }}</a>
{% endfor %}

保持できる値は2つだけです。

私はフィールド値にアクセスするためにあらゆる方法を試しましたが、何も機能しないようです。

3
Kevin

twigレベルのフィールドからリンクフィールドのテーマを設定する場合は、item.contentにある既存のリンクレンダリング要素を保持し、追加することをお勧めします。 bootstrapそれにクラス:

field--link.html.twig

{#
/**
 * @file
 * Theme override for a field.
 *
 * Add bootstrap button style to a link field
 */
#}
{% for item in items %}
  {%
    set link_classes = [
      'btn',
      (loop.index0 == 0) ? 'btn--primary' : 'btn--inverted'
    ]
  %}
  {% set content = item.content %}
  {% set content = content|merge({ '#attributes': { class: link_classes } }) %}
  {{ content }}
{% endfor %}

item.contentをマージするには、配列の最上位に#attibutesを取得する必要があります。そのため、{% set content = item.content %}が必要です。

2
4k4

わかりました...私の答えを見つけました。

これを行うには2つの方法があります。 1つの方法は、themename.themeファイル内にあります。

function mytheme_preprocess_field(&$variables) {
  if ($variables['element']['#bundle'] == 'motivation_card' && $variables['element']['#field_name'] == 'field_link') {
    foreach ($variables['items'] as $index => $item) {
      $variables['items'][$index]['content']['url'] = $item['content']['#url']->toString();
    }
  }
}

私が使用した別の(好ましい)方法は、 render_var twig関数を使用することです。

{{ render_var(item.content['#url']) }}
1
Kevin