ノードによって参照される段落があります。現在、トークンを使用してノードのフィールド値を段落に渡そうとしています。私は[paragraph:parent_id]
と[paragraph:parent_type]
のみを認識していますが、特定のフィールド値を取得する方法がわかりません。
私がこれまでに試みたが成功せず:[node:field_foo:value]
[paragraph:field_foo:value]
[paragraph:node:field_foo:value]
[paragraph:parent:field_foo:value]
[paragraph:parent:entity:field_foo:value]
利用可能なトークンのリストには、親トークンが含まれていません。親エンティティのトークンを取得することもできますか?もしそうなら、どのように?
箱から出して何もありません(詳細は この問題 を参照してください)。独自のトークンを実装することはそれほど難しいことではありません。
私はこれをテストする機会がありませんでしたが、うまくいくと確信しています:
function MODULE_token_info_alter(&$info) {
$info['tokens']['paragraph']['parent_entity'] = [
'name' => 'Parent entity',
'description' => 'Parent entity of the paragraph',
];
}
function MODULE_tokens($type, $tokens, array $data, array $options, \Drupal\Core\Render\BubbleableMetadata $bubbleable_metadata) {
$replacements = [];
if ($type == 'paragraph' && $paragraph = $data['paragraph']) {
$parent = $paragraph->getParentEntity();
$bubbleable_metadata->addCacheableDependency($parent);
foreach ($tokens as $name => $original) {
if ($name == 'parent_entity') {
$replacements[$original] = $parent->label();
}
}
$token_service = \Drupal::token();
if ($parent_entity_tokens = $token_service->findWithPrefix($tokens, 'parent_entity')) {
$replacements += $token_service->generate($parent->getEntityTypeId(), $parent_entity_tokens, [$parent->getEntityTypeId() => $parent], $options, $bubbleable_metadata);
}
}
return $replacements;
}
したがって、Drupal 8と段落の最新バージョンでは、これが可能です。
/admin/help/token
のトークンを見ると、段落セクションの下に[paragraph:parent_entity]
があり、これがまさに必要なものです。
使用例:親ノードのタイトルを取得するために、[paragraph:parent_entity:title]
を使用しました。