たとえば、フィールドを印刷する段落テンプレートがあります。
{{ content.field_products }}
このテンプレートでは、次のようにして段落IDを取得できます。
paragraph.id()
この段落IDをフィールドテンプレートで渡す必要があります。これを行うためのよりクリーンで簡単な方法は何ですか?私はこのような解決策を見つけました:
{{ content.field_products|merge({666:paragraph.id()}) }}
次に、このようなフィールドテンプレートの値を取得します。
{% set paragraphId = items[items|length-1].content %}
しかし、これはダーティであり、「メッセージd'erreurUserエラー:「4」はDrupal\Core\Render\Element :: children()の無効なレンダー配列キーです(core/lib/Drupal/Core/Renderの99行目)。 /Element.php)。」それが汚いハックであり、drupal私の "666"配列をレンダリングしてみてください。
おそらく、preprocess_field()に追加した「666」キーの配列を取得し、フィールドテンプレートの新しい変数を作成し、この変数を$ variablesから削除して、この偽の配列をレンダリングするための暫定的な警告を削除します、しかし私はもっと良い方法があると思いますか?テンプレートからその子に変数を渡したいだけです...
ありがとう!
クリーンなソリューションはテンプレートの前処理です:In yourtheme.theme
のようなものを作成します
function yourtheme_preprocess_field(&$variables, $hook) {
$element = $variables['element'];
$parentEntity = $element['#object'];
//might be useful for if-clause: $variables['field_name'] and $variables['field_type']
if ($parentEntity && $parentEntity->getEntityTypeId() == 'paragraph' ) {
//whatever logic you need goes here, e.g. something like
//$variables['attributes']['data-from-parent-paragraph'] = $parentEntity->getYourStuff();
}
}