【问题标题】:Get Taxonomy Term ID by Node in Drupal 8在 Drupal 8 中按节点获取分类术语 ID
【发布时间】:2017-08-15 12:39:13
【问题描述】:

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

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

Drupal 版本。 8.3.6

【问题讨论】:

  • 可能没有,其他答案属于以前的版本。该解决方案不适合当前的 Drupal。 (特别是8.3.6)
  • 你尝试了什么?更新代码。

标签: drupal-8


【解决方案1】:

你可以这样做:

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

然后你可以加载这个词

Term::load($termId);

希望这会有所帮助。

【讨论】:

  • 您还可以从节点加载术语,例如node->get('field_yourfield')->entity,并从此处检索名称,例如node->get('field_yourfield')->entity->name->value
  • ->target_id 如果您只有一个术语,那就太好了,不幸的是,如果用户可以勾选多个复选框,它只会给您第一个。我在源代码或 kint() 中看不到任何明显的东西,所以回到 ->referencedEntities() 或 getValue() 它是……
【解决方案2】:

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

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

希望对你有用。

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

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

你会得到这样的东西:

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

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

【讨论】:

    【解决方案3】:

    @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;
    

    【讨论】:

      【解决方案4】:

      如果您了解一点 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 以逗号分隔? (我使用它以编程方式将上下文过滤器参数传递给视图,这需要 , (OR) 或 + (AND) 来指定多个值。)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-26
        • 2022-06-23
        • 2017-03-19
        • 1970-01-01
        相关资源
        最近更新 更多