目录
钥匙要点
>这里没有什么与众不同的。如果需要,我们甚至可以启用模块。
模板
在Drupal 8
>在Drupal 8中@FieldFormatter注释的目的是什么?它包括诸如ID,标签和field_types之类的属性。 ID是用于格式化器的唯一标识符,标签是人类可读名称,而field_types是格式化器支持的字段类型计算机名称的数组。
>在Drupal 8中将您的自定义字段格式化应用于字段,您需要转到内容类型,分类学术语或其他具有具有该类型的实体类型的“管理显示”选项卡场地。在列表中找到字段,然后从“格式”下拉列表中选择您的自定义格式化器。然后单击“更新”按钮并保存更改。
的自定义字段类型创建自定义字段formatter ,您可以为Drupal 8中的自定义字段类型创建自定义字段格式。我可以使用自定义字段格式格式在Drupal 8中显示链接?您需要实现viewElements()方法来生成链接字段值的渲染数组。

>如何为Drupal 8中的多值字段创建自定义字段格式化?类并实现ViewElements()方法。该方法应考虑到该字段可能具有多个值的字段值返回渲染数组。

首页 后端开发 php教程 在Drupal 8中创建自定义字段格式

在Drupal 8中创建自定义字段格式

Feb 18, 2025 am 08:42 AM

在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 8中创建自定义字段格式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
登录后复制
登录后复制
登录后复制

这是我们的插件。别无其他。在类声明上方,我们有@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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1676
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

您如何防止PHP中的SQL注入? (准备的陈述,PDO) 您如何防止PHP中的SQL注入? (准备的陈述,PDO) Apr 15, 2025 am 12:15 AM

在PHP中使用预处理语句和PDO可以有效防范SQL注入攻击。1)使用PDO连接数据库并设置错误模式。2)通过prepare方法创建预处理语句,使用占位符和execute方法传递数据。3)处理查询结果并确保代码的安全性和性能。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP:处理数据库和服务器端逻辑 PHP:处理数据库和服务器端逻辑 Apr 15, 2025 am 12:15 AM

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

PHP的目的:构建动态网站 PHP的目的:构建动态网站 Apr 15, 2025 am 12:18 AM

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

在PHP和Python之间进行选择:指南 在PHP和Python之间进行选择:指南 Apr 18, 2025 am 12:24 AM

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

See all articles