在Drupal 8中创建自定义字段格式
钥匙要点
- 在Drupal 8中创建自定义字段格式化格式涉及定义自定义模块的SRC/plugin/field/fieldformatter目录中的新格式化类别,并从默认的ImageFormatter插件延伸。
- 新的格式类别应该覆盖返回字段数据渲染数组的ViewElements()方法,用自定义替换默认的Image_Formatter主题。 在模块的.module文件中创建了一个新主题,image_title_caption_formatter,与默认image_formatter主题中的相同变量传递。 可以通过内容类型的“管理显示”选项卡应用自定义字段格式化器,从“格式”下拉下拉下拉下拉列表中的“管理显示”选项卡中。
- >请注意,由于开发过程Drupal 8在撰写本文时已经进行了,因此代码的某些部分可能已经过时。查看此存储库,我尝试更新示例代码并使其与最新的Drupal 8版本一起使用。
- > >随着带注释的插件的引入,在Drupal 8中发生了很多变化。我们有一种更简化的方法来描述和发现扩展核心的功能。与许多其他组件一起,以前的字段API(较大和合并的实体API的一部分)现在基于插件。
我们在此处编写的代码可以在此存储库中找到image_title_caption模块。但是,让我们看看我们如何达到最终结果。
>
drupal模块
>让我们首先创建一个新的自定义模块(image_title_caption),只有一个文件:
image_title_caption.info.yml:
>这里没有什么与众不同的。如果需要,我们甚至可以启用模块。
插件
在Drupal 8中>,字段格式(例如字段类型和小部件本身)是插件。核心模块定义了核心模块,也可以在Drupalcorefieldpluginfieldfieldformatter名称空间内找到。就像我们在上一篇文章中看到的那样,我们查看了自定义块,插件也位于模块的SRC/插件/文件夹中。对于字段格式,这将是SRC/Plugin/field/fieldformatter目录。
name: Image title caption type: module description: Uses the image title field as a caption core: 8.x dependencies: - image
> src/plugin/field/fieldformatter/imageTitleCaption.php:
name: Image title caption
type: module
description: Uses the image title field as a caption
core: 8.x
dependencies:
- image
登录后复制登录后复制登录后复制
name: Image title caption type: module description: Uses the image title field as a caption core: 8.x dependencies: - image
这是我们的插件。别无其他。在类声明上方,我们有@fieldformatter的注释,可以通过该注释找到插件。我们指定插件ID(image_title_caption),标签和一系列字段类型,可以与此格式使用。在我们的情况下,后者仅包含默认图像字段类型,但是如果愿意,我们可以支持更多的自定义字段类型。该数组中的值是插件ID,因此,如果您查看图像字段类型插件,您会发现其ID是Image。
类看起来很简单,因为我们正在从核心图像模块定义的默认ImageFormatter插件延伸。出于我们的目的,我们需要覆盖的只是负责返回字段数据渲染数组的ViewElements()方法。后者可以在$项目列表中找到,可以用于渲染和准备。>我们在此方法中要做的第一件事是确保我们在项目上调用父类方法并将其存储在变量中。这已经准备好将图像呈现,就像通常一样。
默认情况下,ImageFormatter插件(父)在渲染数组中使用image_formatter主题来输出图像字段值。我们在这里做的是,对于每个项目,我们用自己的主题替换此主题:image_title_caption_formatter。然后,我们像父母一样返回元素(渲染数组)。
>您会在Drupal 8中注意到很多:我们可以很好地指出我们需要扩展的父级课程需要做什么。而且,如果您问我,这比弄清楚某些魔术钩或功能的功能要好得多。
主题
>由于我们在上面指定的image_title_caption_formatter主题到目前为止是虚构的,因此我们需要创建它。在我们模块的.Module文件中,我们需要实现hook_theme:
image_title_caption.module:
>这看起来应该熟悉,因为它与Drupal 7非常相似。请注意我们传递给此主题的变量。我们打算覆盖默认的image_formatter主题,因此我们也应该在此处传递相同的变量。此外,由于对Image_formatter主题进行了预处理,因此我们还需要为我们的主题创建一个预处理程序:
<span><span><?php </span></span><span> </span><span><span>/** </span></span><span><span> * <span>@file </span></span></span><span><span> * Contains \Drupal\image_title_caption\Plugin\Field\FieldFormatter\ImageTitleCaption. </span></span><span><span> */ </span></span><span> </span><span><span>namespace Drupal<span>\image_title_caption\Plugin\Field\FieldFormatter</span>; </span></span><span> </span><span><span>use Drupal<span>\Core\Field\FieldItemListInterface</span>; </span></span><span><span>use Drupal<span>\image\Plugin\Field\FieldFormatter\ImageFormatter</span>; </span></span><span> </span><span><span>/** </span></span><span><span> * Plugin implementation of the 'image_title_caption' formatter. </span></span><span><span> * </span></span><span><span> * @FieldFormatter( </span></span><span><span> * id = "image_title_caption", </span></span><span><span> * label = @Translation("Image with caption from title"), </span></span><span><span> * field_types = <span>{ </span></span></span><span><span> * "image" </span></span><span><span> * <span>} </span></span></span><span><span> * ) </span></span><span><span> */ </span></span><span><span>class ImageTitleCaption extends ImageFormatter { </span></span><span> </span><span> <span>/** </span></span><span><span> * <span>{@inheritdoc} </span></span></span><span><span> */ </span></span><span> <span>public function viewElements(FieldItemListInterface $items) { </span></span><span> <span>$elements = <span>parent::</span>viewElements($items); </span></span><span> <span>foreach ($elements as &$element) { </span></span><span> <span>$element['#theme'] = 'image_title_caption_formatter'; </span></span><span> <span>} </span></span><span> </span><span> <span>return $elements; </span></span><span> <span>} </span></span><span> </span><span><span>}</span></span>
在此预处理器中,我们执行两个动作:
<span>/** </span><span> * Implements hook_theme(). </span><span> */ </span><span>function image_title_caption_theme() { </span> <span>return array( </span> <span>'image_title_caption_formatter' => array( </span> <span>'variables' => array('item' => NULL, 'item_attributes' => NULL, 'url' => NULL, 'image_style' => NULL), </span> <span>), </span> <span>); </span><span>}</span>
>我们确保将传递给模板文件的变量首先由默认的Image_Formatter主题预处理程序进行预处理。因此,所有变量都是完全相同的,并且图像按通常的显示。
- 我们创建了一个称为字幕的新变量,该变量将包含图像标题的消毒值。
- 用于固定化,我们在静态上使用辅助弦类。我们仍在.module文件内部,因此我们不能注入它,但是我们需要 >使用
>
name: Image title caption type: module description: Uses the image title field as a caption core: 8.x dependencies: - image
模板
最后,我们需要为我们的新主题创建一个模板文件:>模板/图像标准caption-formatter.html.twig:
与Drupal 7相似,该文件的名称很重要,因为它反映了主题名称。至于内容,它们几乎与image_formatter主题使用的模板相同,除了打印在底部的字幕。
<span><span><?php </span></span><span> </span><span><span>/** </span></span><span><span> * <span>@file </span></span></span><span><span> * Contains \Drupal\image_title_caption\Plugin\Field\FieldFormatter\ImageTitleCaption. </span></span><span><span> */ </span></span><span> </span><span><span>namespace Drupal<span>\image_title_caption\Plugin\Field\FieldFormatter</span>; </span></span><span> </span><span><span>use Drupal<span>\Core\Field\FieldItemListInterface</span>; </span></span><span><span>use Drupal<span>\image\Plugin\Field\FieldFormatter\ImageFormatter</span>; </span></span><span> </span><span><span>/** </span></span><span><span> * Plugin implementation of the 'image_title_caption' formatter. </span></span><span><span> * </span></span><span><span> * @FieldFormatter( </span></span><span><span> * id = "image_title_caption", </span></span><span><span> * label = @Translation("Image with caption from title"), </span></span><span><span> * field_types = <span>{ </span></span></span><span><span> * "image" </span></span><span><span> * <span>} </span></span></span><span><span> * ) </span></span><span><span> */ </span></span><span><span>class ImageTitleCaption extends ImageFormatter { </span></span><span> </span><span> <span>/** </span></span><span><span> * <span>{@inheritdoc} </span></span></span><span><span> */ </span></span><span> <span>public function viewElements(FieldItemListInterface $items) { </span></span><span> <span>$elements = <span>parent::</span>viewElements($items); </span></span><span> <span>foreach ($elements as &$element) { </span></span><span> <span>$element['#theme'] = 'image_title_caption_formatter'; </span></span><span> <span>} </span></span><span> </span><span> <span>return $elements; </span></span><span> <span>} </span></span><span> </span><span><span>}</span></span>
>现在我们已经编写了代码,我们需要启用模块并清除所有缓存,如果我们在启用后进行了代码更改。是时候测试了。
>例如,转到admin/struction/type/manage/acrate/display的文章内容类型字段显示设置。对于图像字段,在格式标题下,您应该能够从标题格式中选择带有标题的图像。保存表单,然后转到admin/struction/type/manage/acrate/fields/node.field_image,并确保启用图像字段标题。
最后,您可以编辑文章,上传图像并指定标题。该标题将继续以这种方式行为,但此外,它将以标题显示在图像下方。当然,您仍然可以按照自己的意愿进行样式。
>结论
在本文中,我们看到了创建字段格式器并扩展drupal 8中的默认行为是多么容易。我们仅涉及此插件的覆盖效果(),但是我们可以做更多的事情来进一步自定义事物。您也不需要扩展图像形式。有很多现有的插件可以从示例中延伸或使用。> 此外,您还可以轻松地创建新的字段类型和小部件。这是一个类似的过程,但是您需要考虑一些架构信息,使用不同的注释类并编写更多代码。但是关键是您这样做非常灵活。
在Drupal 8
中创建自定义字段格式化的经常询问的问题如何在Drupal 8中创建自定义字段格式化?首先,如果还没有一个自定义模块,则需要创建一个自定义模块。然后,在您的自定义模块中,在src/plugin/field/fieldformatter目录中创建一个新文件。该文件应根据其将要包含的类命名。在此文件中,您将定义您的自定义字段格式类别类,该类应扩展formatterbase类。您将需要实现多种方法,包括负责为字段值生成渲染数组的ViewElements()。
>在Drupal 8中@FieldFormatter注释的目的是什么?它包括诸如ID,标签和field_types之类的属性。 ID是用于格式化器的唯一标识符,标签是人类可读名称,而field_types是格式化器支持的字段类型计算机名称的数组。
我如何将我的自定义字段格式化应用于Drupal 8?
>在Drupal 8中将您的自定义字段格式化应用于字段,您需要转到内容类型,分类学术语或其他具有具有该类型的实体类型的“管理显示”选项卡场地。在列表中找到字段,然后从“格式”下拉列表中选择您的自定义格式化器。然后单击“更新”按钮并保存更改。
>如何控制Drupal 8中的自定义字段格式化的输出?由格式类别类别的ViewElement()方法控制。此方法应返回字段值的渲染数组。您可以使用Drupal的主题系统进一步自定义输出。
>>我可以在Drupal 8?
中使用自定义字段格式用于多个字段类型drupal 8。中的字段类型。在格式化类的@fieldformatter注释中,您可以在field_types属性中指定字段类型的机器名称的数组。如何在我的自定义字段格式化中为我的自定义field formatter创建一个在我的自定义字段formatter in In In In Drupal 8?>要为Drupal 8中的自定义字段格式化创建设置表单,您需要在格式类别中实现settingsform()和settingssummary()方法。 settingsform()方法应返回设置的表单阵列,并且settingssummary()方法应返回设置的摘要行的数组。
我如何使用自定义字段格式在drupal中显示图像8?>要使用自定义字段格式格式在Drupal 8中显示图像,您的格式化类别应扩展ImageFormatterBase类而不是FormatterBase。您将需要实现viewElements()方法来生成图像字段值的渲染数组。
我可以为Drupal 8?
的自定义字段类型创建自定义字段formatter ,您可以为Drupal 8中的自定义字段类型创建自定义字段格式。我可以使用自定义字段格式格式在Drupal 8中显示链接?您需要实现viewElements()方法来生成链接字段值的渲染数组。>如何为Drupal 8中的多值字段创建自定义字段格式化?类并实现ViewElements()方法。该方法应考虑到该字段可能具有多个值的字段值返回渲染数组。
以上是在Drupal 8中创建自定义字段格式的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。
