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

时间:2017-08-15 12:39:13

标签: drupal-8

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

如何使用Node对象获取Taxonomy Term Id?

Drupal ver。 8.3.6

4 个答案:

答案 0 :(得分:5)

如果您想获取Taxonomy Term数据,可以使用以下代码:

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

希望它对你有用。

PS:如果你只需要Term的id,你就可以使用它:

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

你会得到这样的东西:

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

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

答案 1 :(得分:3)

你可以这样做:

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

然后您可以使用

加载术语
Term::load($termId);

希望这有帮助。

答案 2 :(得分:1)

@Kevin Wenger的评论对我有所帮助。我完全以他的评论为基础。

在您的代码中,当您有权访问完全加载的\ Drupal \ node \ 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;

答案 3 :(得分:0)

如果您了解一些 Laravel (特别是Collections),如何轻松提取多个术语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号用逗号分隔? (我将其用于以编程方式将上下文过滤器参数传递给视图,该视图需要,(或)或+(与)来指定多个值。)

$targets = collect($field_value)->implode('target_id', ',');

// $targets = "1,2,3"