【问题标题】:drupal 8 get taxonomy term value in nodedrupal 8在节点中获取分类术语值
【发布时间】:2016-09-04 12:13:59
【问题描述】:

Drupal\node\Entity\Node 对象 ( [预览] => [值:受保护] => 数组 ( [视频] => 数组 ( [x-默认] => 1 )

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

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

                    )

            )

无法直接获取 field_destination 值。这是内容类型附带的分类术语。有任何帮助。

【问题讨论】:

    标签: drupal-8


    【解决方案1】:

    VJamie's 答案为基础。

    您需要在脚本顶部设置使用语句;

    use Drupal\taxonomy\Entity\Term;
    

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

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

    这将摆脱致命的。

    【讨论】:

      【解决方案2】:

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

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

      希望对你有用

      【讨论】:

      • 如果我没记错的话,$node->get('field_destination')->getEntity(); 将简单地返回 $node 本身。不过referencedEntities() 方法非常有用。
      • @marcvangend 是正确的,getEntity() 返回字段父级,即它的节点。 referencedEntities() 是正确答案。
      • 非常感谢您的回答。我将从我的答案中删除 getEntity() 以避免混淆。
      • 一个高度准确的答案
      • 这是最好的答案——非常简洁。
      【解决方案3】:

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

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

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

      $name = $term->getName();
      

      希望对您有所帮助!

      【讨论】:

      • Term::load 怎么会导致问题。致命错误:找不到 Class 'Drupal\rest\Plugin\Block\Term'。
      • @VJamie 我尝试添加use \Drupal\taxonomy\Entity; 并使用Term::load($node->get('field_destination')->target_id);,但它失败了。你加载了什么类?
      【解决方案4】:

      这是实现它的正确方法

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

      【讨论】:

        【解决方案5】:

        这样做

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

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

        【讨论】:

          【解决方案6】:

          entity 属性可以直接从任何引用类型字段访问。

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

          【讨论】:

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