drupal 8获取节点中的分类术语值

时间:2016-05-09 18:26:31

标签: drupal-8

Drupal \ node \ Entity \ Node Object (     [in_preview] =>     [values:protected] =>排列         (             [vid] =>排列                 (                     [x-default] => 1                 )

        [langcode] => Array
            (
                [x-default] => en
            )

        [field_destination] => Array
            (
                [x-default] => Array
                    (
                        [0] => Array
                            (
                                [target_id] => 2
                            )

                    )

            )

无法直接获取field_destination值。它是与内容类型相关的分类术语。任何有用的帮助。

6 个答案:

答案 0 :(得分:17)

VJamie's答案为基础。

您需要在脚本顶部设置一个use语句;

use Drupal\taxonomy\Entity\Term;

或者,在类实例前加上命名空间;

$term = \Drupal\taxonomy\Entity\Term::load($node->get('field_destination')->target_id);

那将摆脱致命。

答案 1 :(得分:9)

您还可以使用EntityReferenceFieldItemList中的一些方法: 获取此字段引用的实体,保留字段项目增量:

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

希望它对你有用

答案 2 :(得分:8)

以下代码将为您提供所需的术语对象。

$term = Term::load($node->get('field_destination')->target_id);

如果您需要该术语的名称,可以执行以下操作

$name = $term->getName();

希望这会有所帮助!

答案 3 :(得分:0)

这是实现它的正确方法

use Drupal\taxonomy\Entity\Term;

function modulename_node_presave(Drupal\Core\Entity\EntityInterface $entity) {
    switch ($entity->bundle()) {
        case 'programs':
            $term = Term::load($entity->get('field_program_names')->target_id);
            $name = $term->getName();
            $entity->setTitle($name);
            break;
    }
}

答案 4 :(得分:0)

可以直接从任何引用类型字段访问

entity属性。

$node = 'myNode';
$termEntity = $node->get('field_taxonomy_reference')->entity;
if ($termEntity instanceof TermInterface) {
  $termLabel = $termEntity->label();
}

答案 5 :(得分:0)

这样做

use Drupal\taxonomy\Entity\Term;
$term = Term::load($node->get('field_destination')->target_id);
$termname = $term->getName();

在drupal8中,我们曾经使用oops方法来获取值。