在drupal 8自定义实体的buildrow函数中检索分类术语

时间:2017-08-04 13:36:28

标签: drupal-8

我已经构建了一个运行良好的自定义实体。我的一个字段是分类法,但我无法在显示我的记录的buildRow(EntityInterface $entity)函数中检索该术语的名称。

对于一个简单的字符串字段,我执行:$row['foo'] = $entity->foo->value;

如何进行entity_reference的分类术语:$row['bar'] = $entity->BAR_TERM_NAME;

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

要按要求工作,您需要3件事:

  1. 在自定义实体中实现 entity_reference 字段。
  2. 为您添加一个getter方法字段。
  3. 在自定义 ListBuilder 中检索您的字段 - >的 buildRow()即可。
  4. 查看关于FieldTypes, FieldWidgets and FieldFormatters的Drupal 8文档。

    实施 entity_reference 字段

    您的实体中的字段 foo 应使用 entity_reference 字段类型生成。

    public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
      // Some code ...
    
      $fields['foo'] = BaseFieldDefinition::create('entity_reference')
        ->setLabel($this->t('Foo field'))
        ->setDescription($this->t('The Foo field.'))
        ->setSetting('target_type', 'taxonomy_term')
        ->setSetting('handler', 'default')
        ->setSetting('handler_settings', ['target_bundles' => ['vocabulary_id' => 'vocabulary_id']])
        ->setDisplayOptions('view', [
          'label'  => 'hidden',
          'type'   => 'vocabulary_id',
          'weight' => 0,
        ])
        ->setDisplayOptions('form', [
          'type'     => 'options_select',
          'weight'   => 40,
        ])
        ->setDisplayConfigurable('form', TRUE)
        ->setDisplayConfigurable('view', TRUE);
    
      // Some code ...
    }
    

    然后你应该用你想要链接的词汇替换3 vocabulary_id

    添加一个getter

    baseFieldDefinitions 相同的类。

    // Some code ...
    public function getFoo() {
      return $this->get('foo')->value;
    }
    // Some code ...
    

    检索字段

    ListBuilder 类中。

    public function buildRow(EntityInterface $entity) {
      // Some code ...
      $row['foo']   = $entity->getFoo();
    
      // Some code ...
    }
    

    希望它会对你有所帮助!