在 Drupal 8 中按节点获取分类术语 ID



我正在尝试按特定节点获取分类数据。

如何使用节点对象获取分类术语 ID?

Drupal 版本 8.3.6

你可以做这样的事情:

$termId = $node->get('field_yourfield')->target_id;

然后,您可以使用

Term::load($termId);

希望这有帮助。

如果要获取分类术语数据,可以使用以下代码:

$node->get('field_yourfield')->referencedEntities();

希望对您有用。

PS:如果你只需要术语的id,你可以使用这个:

$node->get('field_yourfield')->getValue();

你会得到这样的东西:

[0 => ['target_id' => 23], 1 => ['target_id'] => 25]

例如,我的字段有 2 个引用的分类术语。 谢谢!

@Kevin温格的评论帮助了我。 我完全基于他的评论来回答这个答案。

在您的代码中,当您可以访问完全加载的 \Drupalode\Entity\Node 时,您可以访问所有(深度(嵌套属性。

在这个例子中,我有一个节点,它有一个分类术语字段"field_site"。"field_site"术语本身有一个纯文本字段"field_site_url_base"。 为了获取"field_site_url_base"的值,我可以使用以下内容:

$site_base_url = $node->get('field_site')->entity->field_site_url_base->value;

如果您知道一点Laravel(特别是集合(,如何轻松提取多个术语 ID:

设置:composer require tightenco/collect使集合在Drupal中可用。

// see @Wau's answer for this first bit...
// remember: if you want the whole Term object, use ->referencedEntities()
$field_value = $node->get('field_yourfield')->getValue();
// then use collections to avoid loops etc.
$targets = collect($field_value)->pluck('target_id')->toArray();
// $targets = [1,2,3...]

或者,也许您希望将术语ID逗号分隔?(我使用它以编程方式将上下文筛选器参数传递给视图,这需要,(OR( 或+(AND( 来指定多个值。

$targets = collect($field_value)->implode('target_id', ',');
// $targets = "1,2,3"

最新更新