フィールドテンプレートレベルから、リンクフィールドの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つだけです。
私はフィールド値にアクセスするためにあらゆる方法を試しましたが、何も機能しないようです。
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つの方法があります。 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']) }}