首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改实体自动完成结果?

问如何更改实体自动完成结果?
EN

Drupal用户
提问于 2016-09-02 12:28:45
回答 3查看 3.7K关注 0票数 1

我想在hook_form_alter中修改实体自动完成结果。我的功能是

1)我有一个分类法的实体引用,而bundle is标记是第2级(字段名: Product ),在这篇文章中,我从Level2 3中选择了一个术语),我有另一个实体自动完成,它指的是分类标签级别1(字段名:产品父级)

现在,我的问题是,如果我在Product字段中选择一个二级术语,是否有任何选项可以在Product字段中显示该Product子字段的父项,例如:

代码语言:javascript
复制
Cabbage (L1)
 -> Fruit (L2)
 -> Flower (L2)

Lemon(L1)
 -> Lemon Fruit(L2)
 -> Eatable (L2)

如果我选择“产品子”字段中的“水果”,则只希望在“产品父字段”中显示“柠檬”。有没有办法这么做。

EN

回答 3

Drupal用户

发布于 2017-08-22 05:39:57

我编写了一个小模块,演示如何修改实体自动完成建议。您可以尝试修改它以满足您的需要。https://github.com/minnur/Alter-Entity-Autocomplete

票数 3
EN

Drupal用户

发布于 2016-09-02 16:08:42

“自动完成”当前不接收作为上下文的父节点。

您可以尝试将JS用于不同的自动完成配置,以便以某种方式长时间传递该数据。查看动态实体引用模块如何切换自动完成以支持不同的目标实体类型。

我认为,您还需要实现自己的选择插件,这样您就可以传递一些配置,然后再对其进行操作。此外,配置是存储在服务器端的,客户端只获得一个随机密钥,因此当第一个字段发生更改时,您可能实际上需要使用#ajax重新构建第二个字段。

因此,这并不简单,而且需要相当多的自定义代码。

可能的替代办法:

  • 分级选择,只在一个字段上操作,并且还没有D8端口。
  • 只允许用户选择产品子字段,在hook_node_presave()上实现一些自定义代码来自动设置父字段。我们做类似的事情,例如,在一个节词汇表中,我们将整个层次结构存储在一个多值section_all字段中,以便更容易地查询。这将更好地结合上面的HS模块,因为如果您想要的话,用户仍然可以先选择父模块。但不幸的是,似乎还没有港口。
票数 2
EN

Drupal用户

发布于 2020-10-29 21:11:09

一个只会改变您想要的引用字段的更快的解决方案是制作一个EntityReferenceSelection插件,并在字段设置中选择它作为“参考方法”。只需确保您的id与docblock中的类别相匹配(否则它将无法在字段设置中进行选择):

代码语言:javascript
复制
<?php

namespace Drupal\custom_module\Plugin\EntityReferenceSelection;

use Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection;
use Drupal\node\NodeInterface;

/**
 * Provides custom entity reference selection functionality.
 *
 * @EntityReferenceSelection(
 *   id = "custom",
 *   label = @Translation("Custom Reference Method"),
 *   group = "custom",
 *   weight = 1
 * )
 */
class CustomSelection extends DefaultSelection {
...

然后可以重写实体查询或返回的标签。

票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/213539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档