logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动
01/10/2025, by Ivan

数据库 API 在发生错误时会抛出异常,可以通过在 try {} catch() {} 块中包装数据库操作来捕获,如下面示例所示:

// 在这里开启事务。
$txn = $connection->startTransaction();
try {
  $id = $connection->insert('example')
    ->fields([
      'field1' => 'mystring',
      'field2' => 5,
    ])
    ->execute();

  my_other_function($id);

  return $id;
}
catch (Exception $e) {
  // 某处发生错误,因此立即回滚。
  $txn->rollBack();
  // 将异常记录到 watchdog。
  \Drupal::logger('type')->error($e->getMessage());
}

 

01/10/2025, by Ivan

Drupal 的数据库层并不提供跨数据库的 SQL 函数抽象。为了在不同受支持的数据库引擎之间保持可移植性,你的代码应当仅使用那些已知属于 ANSI 标准并且在 Drupal 支持的所有数据库中都可用的函数。下面列出的只是一个仍然不完整的清单。推荐使用此处给出的形式,因为其他语法变体可能并不适用于所有数据库。

请注意,数据库层并没有白名单操作符,因此你可以传递一个非标准函数,比如 REPLACE(),在支持这种语法的数据库中它将可以正常工作。

逻辑运算符

  • AND
  • OR
  • NOT

 

比较运算符

  • <
  • >
  • <=
  • >=
  • <>
  • LIKE

 

30/09/2025, by Ivan

Drupal 8 实体系统

实体是带有方法的强类型类

通用方法

$entity->id()

特定于实体类型的方法 $node->getTitle()

 

背景

实体系统在 Drupal 7 开发周期的后期引入,带有基本的实体加载标准。entity.module 进一步扩展了 API,增加了对保存和删除实体的支持,以及许多其他改进。

这些改进中的大多数现在已包含在 Drupal 8 中。实体验证现在在其自己的 API 中进行(例如,它可以验证通过 REST 保存的实体,而不是通过表单)。

两种变体

核心中的实体类型有两种变体。

30/09/2025, by Ivan
  • Drupal 7 - 实体是通用的 stdClass 对象。
  • Drupal 8 - 实体现在是具有特定类型的对象,每种实体类型都会定义一个类,用于该实体的实例。

要求
实体类必须放置在提供该实体类型的模块的 Entity 子命名空间中,例如 \Drupal\[module_name]\Entity。这意味着实体类的 PHP 文件可以在模块的 src/Entity 目录下找到。

类的文档块必须包含 EntityType 注解,它定义了该类型实体的元数据。这些包括实体类型的标签、控制器、表等。有关所有可用元数据属性的文档化列表,请参阅 \Drupal\Core\Entity\Annotation\EntityType 类。

命名

如果实体类型与模块名称不一致,则实体类型的名称必须带有模块名前缀。实体类型类本身不需要加前缀,因为它位于定义模块的命名空间中,只要类名本身足够清晰。例如,分类术语的实体类型称为 taxonomy_term,而类名为 Drupal\taxonomy\Entity\Term。

30/09/2025, by Ivan

在 Drupal 8 中,捆绑(Bundles)是一种信息容器类型,用于保存字段定义或设置。有时它们也被称为“子类型(subtypes)”。捆绑是可选的,在信息容器的层级中位于实体类型之下。

  • 实体变体(内容和配置;许多实体成对出现,例如区块)

                       - 实体类型
                                       - 捆绑或子类型(可选)

这些容器类型的示例:

30/09/2025, by Ivan

目标受众

本文件主要面向具有面向对象 PHP、Drupal 6 或 Drupal 7 编程经验的开发人员,以及希望学习 Drupal 8 原理的人。

Drupal 8 内容实体类型创建文档 包含完整的可用选项列表。

在 Drupal 8 中构建无绑定的内容类型

在这种情况下,我们创建一个 Drupal 8 内容对象,它没有任何绑定。

该实体没有实现字段 API,因此它仅存在于代码中。不过,这可以作为构建内容实体的有用框架,因为我们稍后会导入更复杂的数据。

最后,当涉及到一些面向对象编程(OOP)的概念时,我会引用相关文档。

背景

我们的模块叫做“advertiser”。
我们的内容实体类型也叫做“advertiser”。

我们新的 Drupal 8 advertiser 内容实体将拥有以下字段:
- UUID
- ID

30/09/2025, by Ivan

Эта страница является копией конфигурации «Включить по умолчанию» в модуле Drupal 8. Это следует рассматривать как已弃用。

在 Drupal 8 中,借助新的配置 API,创建自定义内容类型变得相当简单。

前提条件

  • 已安装 Drupal 8.0.x
  • 有一个自定义模块(在本示例中使用的模块名为 foobar)

创建自定义内容类型

如介绍中所述,创建自定义内容类型是通过创建几个 YAML 文件完成的,这些文件包含所有必需的设置。在此示例中,我们将创建一个名为 Car Brand 的内容类型,它将包含两个字段(默认):正文和标题。

foobar/config/install/node.type.car_brand.yml