【问题标题】:drupal 8 BaseFieldDefinition entity_reference with condition带有条件的drupal 8 BaseFieldDefinition entity_reference
【发布时间】:2017-12-06 11:02:15
【问题描述】:

我不确定这是否是实现这一点的正确方法,所以我希望你能帮助我。 我试图在 Drupal 8 中引用一个自定义内容实体,条件是只有当前用户创建的实体才应该显示。

基本上 自定义实体 1 -> 自定义实体 2(由用户创建)

我找到了一种使用视图执行此操作的方法,但我想知道如何以编程方式实现此目的。

请注意,我已经设法获取了一个 id 列表并将其显示为下拉列表,但这不是我想要的。

我想将参考显示为自动完成。

这是我目前得到的:

$fields['dishes'] = BaseFieldDefinition::create('entity_reference')
        ->setLabel(t('Dishes'))
        ->setDescription(t('Select the dishes to add  to this menu'))
        ->setSetting('target_type', 'dish')
        ->setSetting('handler', 'default')
        ->setTranslatable(TRUE)
        ->setCardinality(-1)
        ->setDisplayOptions('view', [
            'label' => 'hidden',
            'type' => 'entity_reference_label',
            'weight' => -1,
        ])
        ->setDisplayOptions('form', [
            'type' => 'entity_reference_autocomplete',
            'weight' => -1,
            'settings' => [
                'match_operator' => 'CONTAINS',
                'size' => '60',
                'autocomplete_type' => 'tags',
                'placeholder' => '',
            ],
        ])
        ->setDisplayConfigurable('form', FALSE)
        ->setDisplayConfigurable('view', TRUE);

有没有办法为此添加条件? 或者自定义 Drupal 执行的查询以获取引用的实体?

【问题讨论】:

  • 您可以创建一个自定义的EntityReferenceSelection 插件来修改用于过滤掉实体的查询。您可以阅读this article 了解如何操作。

标签: drupal entity drupal-8 entityreference


【解决方案1】:

试试这个:

`

$fields['subgroup_id'] = BaseFieldDefinition::create('entity_reference')
  ->setLabel(t('Dalinama grupėms'))
  ->setDescription(t('Allocation groups.'))
  ->setSetting('target_type', 'distribution_group')
  ->setSetting('handler', 'views')
  ->setSetting('handler_settings', [
    'view' => [
      'view_name' => 'entity_reference_views_filter',
      'display_name' => 'entity_reference_1',
    ],
  ])
  ->setRequired(TRUE)
  ->setCardinality(1)
  ->setDisplayOptions('view', array(
    'label' => 'above',
    'type' => 'list_default',
    'weight' => -4,
  ))
  ->setDisplayOptions('form', array(
    'type' => 'options_select',
    'settings' => array(
      'match_operator' => 'CONTAINS',
      'size' => 60,
      'placeholder' => '',
    ),
    'weight' => -2,
  ))
  ->setDisplayConfigurable('form', TRUE)
  ->setDisplayConfigurable('view', TRUE);

`

【讨论】:

  • 即使你的代码确实有效,但不解释你做了什么以及你背后的理由,它也不是一个非常可靠的答案。
  • 看来您正在使用视图引用,这与我正在做的方式相同,我想知道是否有一种方法可以查询并将我的查询值注入自动完成而不是使用视图
  • 这对我有帮助。还有一个类似的帖子drupal.stackexchange.com/questions/194804/…
猜你喜欢
  • 1970-01-01
  • 2018-03-16
  • 2017-10-13
  • 2018-05-26
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 2011-05-30
  • 2020-10-06
相关资源
最近更新 更多