Drupal 8:如何自定义表单小部件以显示实体字段值而不是实体标题?

2023-12-20

我正在通过开发自定义表单小部件模块来迈出了解 Drupal 8 在幕后如何工作的第一步。我的目标是显示引用节点的图像字段值,而不是单选按钮列表中的节点标题(在核心中可用)。这将允许网站管理员在为节点选择背景图像时选择图片而不是文本。

以下是我的表单在没有自定义工作的情况下的外观,使用 Drupal 8 的内置“复选框/单选按钮”小部件:

这是我希望自定义小部件如何显示(至少开始时)的 Photoshop 模型:

到目前为止,我已经能够创建一个扩展“复选框/单选按钮”小部件的启动模块,引用开发人员示例 https://www.drupal.org/project/examples模块和遍历核心。这至少帮助我更好地理解了 Drupal 8 的模块结构。

模块结构:

modules
  custom
    back_image_widget
      back_image_widget.info.yml
      back_image_widget.module
      src
        Plugin
          Field
            Field Widget
              BackImageWidget.php

back_image_widget.info.yml:

name: Background Image Entity Widget
type: module
description: Used to list Background Image entities as images instead of text labels in the Text Message content type form.
package: Custom
core: 8.x

back_image_widget.模块:

<?php

/**
 * @file
 * Used to list Background Image entities as images instead of text labels in the Text Message content type form.
 */

BackImageWidget.php:

<?php

/**
 * @file
 * Contains \Drupal\back_image_widget\Plugin\Field\FieldWidget.
 */

namespace Drupal\back_image_widget\Plugin\Field\FieldWidget;

use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsButtonsWidget;
use Drupal\Core\Form\FormStateInterface;

/**
 * Plugin implementation of the 'field_back_image' widget.
 *
 * @FieldWidget(
 *   id = "field_back_image",
 *   module = "back_image_widget",
 *   label = @Translation("Background Image Entity"),
 *   field_types = {
 *     "entity_reference"
 *   },
 *   multiple_values = FALSE
 * )
 */
class BackImageWidget extends OptionsButtonsWidget {

  //Here we go!

}

这样,我就可以安装模块,选择新的小部件,并拥有核心提供的所有预期功能来启动。

从这里开始,我很难从父类中识别出需要更改的最佳部分,以便我可以用其他实体值替换标题。最有用的功能似乎受到了保护。结果选项返回受保护的标题(没有其他可用信息,例如要使用的节点 ID)。我需要继承曾祖父母并重新开始吗?我猜我需要进一步探索依赖注入?关于如何进行一般性或细节性的任何想法?我对答案很灵活,只要它能帮助我克服这个困境。


您不需要创建自定义小部件。

编辑您的字段并设置“参考方法" from "default" to "视图:按实体参考视图过滤”。然后它会告诉您以下内容(如果尚未定义实体引用视图):

未找到符合条件的视图。使用实体引用创建视图 显示,或将此类显示添加到现有视图中。

然后您继续创建该实体参考视图 (/admin/struction/views),返回您的字段并再次选择它,现在您应该能够选择视图并瞧。

创建实体参考视图时,您可以定义要显示的实体字段(而不是实体标题或附加到它 - 这正是您想要的)。所以实际上你不需要为该功能编写任何代码,这都是配置。

EDIT:

正如提问者所指出的,这并不是开箱即用的。我找到了一个可以实现所需功能的模块(实体参考视图的表单小部件):

https://www.drupal.org/project/entity_reference_views_select https://www.drupal.org/project/entity_reference_views_select

该模块似乎只为实体参考视图启用选择和复选框小部件。

如果需要更复杂的配置,实体浏览器:https://www.drupal.org/project/entity_browser https://www.drupal.org/project/entity_browser看起来也正在大力开发中。 (均未经本人测试)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Drupal 8:如何自定义表单小部件以显示实体字段值而不是实体标题? 的相关文章

  • 通过身份验证保护 CodeIgniter 2 应用程序的正确方法是什么?

    I have Ion Auth http benedmunds com ion auth 正确安装并在我的服务器上运行 我也有默认的代码点火器2 新闻 教程在同一个 CI 安装中工作 我只是在玩 并对使用身份验证系统 封闭 或保护整个应用程
  • if/else 简写来定义变量

    我很难理解 if else 的 php 简写是如何描述的here https stackoverflow com questions 20233207 php if shorthand and echo in one line possib
  • get url 重定向时 File_get_contents() 不起作用

    我正在使用的功能是 function http post url data data url http build query data data len strlen data url date default timezone set
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • PHP 无法加载动态库“php_pdo_oci.dll”

    我在 Windows 8 上运行 Apache 2 4 7 和 PHP 5 5 9 我安装了 PHPUnit 并开始弹出此警告图像 警告 是的 我在 php ini 中启用了扩展加载以及 extension dir 以更正文件夹 并且该文件
  • 未传递“client_reference_id”参数

    我使用 Stripe Checkout Stripe 版本 2016 07 06 我想通过参数 client reference id 恢复个性化数据 但在 JSON 中 当我有金额或电子邮件时 我找不到它 我是在测试环境中 你能帮我吗 先
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 如何将我的 init 函数中的代码集中到所有控制器中?

    public function init this gt view gt user Zend Auth getInstance gt getIdentity this gt view gt siteName Zend Registry ge
  • 如何纠正这个非法字符串偏移?

    我收到此错误 警告 第 32 行 home mysite public html wp content themes evento lib php extra class php 中的非法字符串偏移 type 我意识到文件中的这部分代码是错
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • 将自定义模块创建的内容添加到 drupal 搜索索引中

    我开发了一个模块 可以在不使用 CCK 的情况下为我的网站创建内容 数据将保存在Drupal默认表之外的不同表中 我的要求是 如何让 Drupal 索引我的自定义模块创建的内容 你必须实施钩子搜索 http api drupal org a
  • PHP 扩展开发入门 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请推荐有关 PHP 低 级 modules 编程接口的帮助文章或教程 搜索我的书签 我发现的唯一链接是
  • Facebook PHP SDK - 如何获取访问令牌?

    我正在尝试从我的应用程序在用户的 Facebook 墙上发帖 用户授予应用程序在他的墙上发布的权限 并且我在数据库中有用户ID 我需要自动发送帖子 而无需用户再次登录 我的代码是 try require once dirname FILE
  • PHP print_r() 中 _r 的含义是什么?

    我见过这个答案 https stackoverflow com questions 13103410 what does r suffix mean就这样 但我不确定它对于 PHP 是否相同 如果是 可重入的含义是什么 From PHP n
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • 如何使用 php 在 sql 查询中转义引号?

    我有一个疑问 sql SELECT CustomerID FROM tblCustomer WHERE EmailAddress addslashes POST username AND Password addslashes POST p
  • Stream_context_set_params 不适用于 ssh2.sftp 包装器

    我想使用类似的功能here http www php net manual en function stream notification callback php 请检查以下代码 function notify notification
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • 从字符串中获取数字

    我有一个字符串 例如 lorem 110 ipusm 我想获取 110 我已经尝试过这个 preg match all 0 9 string ret 但这正在返回 Array 0 gt 1 1 gt 1 2 gt 0 我想要这样的东西 Ar

随机推荐

  • 如何修复 docker-machine 中过期的客户端证书

    Doing a docker machine lsa 得到了意想不到的Unable to query docker version Get https x x x x 2376 v1 15 version x509 certificate
  • HTML 5 <画布>

    这是我的代码 需要帮助使用 html 5 canvas 元素和 javascript 代码在山地景观之间绘制云的图像
  • Xcode 7.3.1 无法正确自动完成

    我有一个简单的 全新的 Objective C 项目 适用于 OSX El Capitan 10 11 4 上的 iOS 我使用的是 Cocoapods 因此我使用以下 3 个 pod 创建了 Podfile Firebase UALogg
  • 为什么 .every() 不是函数?

    我收集了所需表单元素的数组 我认为 并添加了 模糊 侦听器 var formInputs input filter required formInputs each function i this on blur function Each
  • 如何从导航抽屉启动活动?

    因此 我在这里搜索了有关导航抽屉的分配 当我从另一个人的问题的答案中找到教程时 我就这么做了 我成功地根据自己的喜好创建了导航抽屉并设计了其样式 但现在我一直在不知疲倦地寻找如何从导航抽屉启动活动 我已设法将一些代码放入 MainActiv
  • Angularjs:如何关闭评论块中的 ng-if ?

    div visible div 很容易 但是因为ngIf http docs angularjs org api ng directive ngIf甚至可以在评论中使用 结束语是什么评论区 尝试过 但运气不佳 Thanks ng if仅限于
  • Amazon S3 中的 Etag 定义已更改

    我使用 Amazon S3 进行备份已经有一段时间了 通常 上传文件后 我会检查 MD5 和匹配 以确保我已进行良好的备份 S3 具有用于给出此总和的 etag 标头 然而 当我最近上传一个大文件时 Etag 似乎不再是 md5 和 它有额
  • 使用替换密码进行加密

    我正在用字母表中的另一个字母替换字母表中的每个字母 例如 每个 a 都会替换为 Q 每个 b 都会替换为 W 我已经编写了代码来加密下面的句子 include
  • 截取 UIView 的屏幕截图,其中子视图是相机会话

    我正在构建一个应用程序 我需要对其子视图是相机会话 AVFoundation 会话 的视图进行屏幕截图 我试过这段代码 CGRect rect self containerView bounds UIGraphicsBeginImageCo
  • 将多个值作为单个参数传递 - Oracle SQL 查询

    我有一个查询 我传递了 2 个参数 COUNTRY REGION 参数和 COST CENTER 参数 我可以同时传递两个参数 COST CENTER 和 COUNTRY REGION 或者传递一个或另一个 这部分没问题 你可以在下面的第一
  • 使用 python 中的请求与不和谐交互

    我正在尝试使用 requests 和 python 自动点击不和谐按钮 但是当我发送请求时出现错误 不和谐按钮 https i stack imgur com tehay png 我试过这个 header authorization XXX
  • 使用 Java Web 服务的 Objective C SOAP 请求

    我有一个简单的 Java Web 服务 WebService serviceName Catalogo V1 public class Catalogo V1 This is a sample web service operation W
  • 除非我显式调用 AnnotationDriver::getAllClassNames,否则 Doctrine 不起作用

    我是第一次尝试使用 Doctrine ORM 并且我正在遵循此处找到配置 http www doctrine project org docs orm 2 0 en reference configuration html obtainin
  • 如何从 C# 将 SQL Server 数据库转换/导出到 MSAccess

    我有一个 SQL Server 数据库 我需要将所有数据导出到用户可以下载的 Access mdb 中 从 C 执行此操作的最简单方法是什么 我意识到我可以有一个空白 但有架构 mdb 当我想导出时我可以复制它 然后通过数据集将所有数据从
  • 是否“int size = 10;”产生一个常量表达式?

    以下代码在 gcc 4 8 和 Clang 3 2 下编译 int main int size 10 int arr size C 标准的8 3 4 1规定数组的大小必须是整型常量表达式 即size似乎不是 这是两个编译器中的错误 还是我遗
  • 在输入助手中调用 ember 把手助手

    我无法找出在 Ember 输入帮助程序中调用 Ember Handlebars registerBoundHelper 的正确方法 BoundHelper 进行日期格式化 Ember Handlebars registerBoundHelp
  • 使 JLabel 淡出

    我正在编写一个应用程序 该应用程序执行某些任务并在成功完成任务时通知用户 为了通知用户我正在使用 jlabel 我希望这个 jlabel 显示消息并在一段时间后消失 我使用 netbeans 作为我的 IDE 这是我的课程的架构 摘要 GU
  • Emacs 中注释缩进错误

    在许多语言中 行注释以单个符号开头 例如 Python 和 R 中的 我发现在 Emacs 中 当编写这样的行注释时 我必须重复注释符号两次才能做出正确的缩进 请参见以下示例 setq x select enable clipboard t
  • 单选按钮的 OnChange 事件处理程序 (INPUT type="radio") 不能作为一个值工作

    我正在为此寻找通用的解决方案 考虑 2 个同名的无线电类型输入 提交后 检查的值决定随表单发送的值
  • Drupal 8:如何自定义表单小部件以显示实体字段值而不是实体标题?

    我正在通过开发自定义表单小部件模块来迈出了解 Drupal 8 在幕后如何工作的第一步 我的目标是显示引用节点的图像字段值 而不是单选按钮列表中的节点标题 在核心中可用 这将允许网站管理员在为节点选择背景图像时选择图片而不是文本 以下是我的