logo

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

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

演示 EBT 模块 下载 EBT 模块

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

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

演示 EPT 模块 滚动

滚动
04/10/2025, by Ivan

欢迎加入我们的 Google Hangout 直播会议,时间为每月最后一个星期二上午 9 点(太平洋时间)

2020 年 3 月临时调整:本月会议将于 3 月 24 日(星期二)上午 11:30(PT)举行,因时间冲突进行调整。

04/10/2025, by Ivan

基础知识

在 Drupal 8 中,简洁 URL(Clean URLs)默认启用且无法禁用。不过,你的 Web 服务器上必须安装重写模块(mod_rewrite)。

请检查浏览器地址栏。你的网站 URL 不应包含 ?q=。

正确的“简洁 URL”示例:

http://www.example.com/node/83

无法正常工作的 URL 示例:

http://www.example.com/?q=node/83

针对不同系统(如 Apache、WAMP、XAMPP 和 IIS)有额外的简洁 URL 设置指南。

启用简洁 URL 的服务器配置

你可以阅读更多关于 Web 服务器的其他要求

在独立服务器(httpd.conf)上配置简洁 URL

在独立服务器上启用简洁 URL 包括以下步骤:

04/10/2025, by Ivan

Drupal 8 使用了许多 PHP 的高级功能和复杂的第三方库,为开发者提供了所有 CMS 中最先进的 API。虽然有经验的 Drupal 7 开发者会注意到一些重大变化,但大部分基础结构仍然熟悉。

如果在学习本模块开发者分步指南(D8)时,有些内容对你来说是新的,那么以下资料可能会有所帮助。不过,进入 D8 模块部分 并不需要完全掌握所有知识。

面向对象编程(OOP)

虽然最初看起来令人望而生畏,但 OOP 已被证明是最佳实践。
要了解 PHP 的最佳实践,请阅读 phptherightway.com。Drupal 并未使用其中所有记录的工具和方法,但该网站是学习 PHP 语言功能的绝佳入门。

通过阅读 PHP 官方关于类与对象的文档以及以下优秀教程,更新你的 OOP 知识:

04/10/2025, by Ivan

在本教程的以下小节中,我们将创建 Drupal 网站的不同部分示例,例如自定义页面、区块、实体、字段等。所有示例都从模块文件夹和 .info.yml 文件开始,仅凭这两个文件,模块就会显示在 Drupal 8 的“扩展”管理页面上,或者可以通过 Drush 直接启用。

本小节将引导你完成模块启动的流程,包括创建、命名以及正确放置 .info.yml 文件,这将成为你创建的每个新模块的起点。

如果你想克隆本节中提供的代码示例的 git 仓库,你需要先安装 git 并按照相关说明进行操作。你可以使用以下命令克隆 git 仓库:

git clone https://github.com/sidharrell/D8HWexample.git modules/custom/hello_world

所有文件默认都会被下载,但你可以通过检出“骨架”版本来隐藏它们,以便从最简结构开始。要这样做,请进入模块目录并运行以下命令:

04/10/2025, by Ivan

在开始之前

如果你希望 PHP 在测试站点上帮助你发现错误,请尝试此处描述的设置:开发时显示所有错误

为你的模块命名

创建模块的第一步是为它选择一个“简短名称”或机器名(machine name)。该机器名将在模块的多个文件和函数中使用,Drupal 核心也会在程序中使用该名称来识别你的模块。

machine_name_2

在选择机器名时,需要遵循以下几个重要规则:

04/10/2025, by Ivan

主题核心:项目元数据

.info.yml 文件(也称为 “info yaml 文件”)是 Drupal 8 模块、主题或安装配置文件的重要组成部分,用于存储项目的元数据。

这些 .info.yml 文件的作用包括:

  • 告诉 Drupal 模块、主题或安装配置文件的存在。
  • 区分不同类型的主题或模块。
  • 为 Drupal Web UI 管理页面提供信息。
  • 指定模块启用和禁用的管理条件,以及与 Drupal 版本的兼容性。
  • 在其他上下文中的一般管理用途。

 

04/10/2025, by Ivan

在开发自定义模块时,有一些场景要求开发人员在模块中添加 composer.json 文件。其中一些场景取决于自定义模块是否打算作为一个项目提交到 drupal.org 社区。

如果模块开发者想要使用托管在 packagist.org 上的 PHP 库,他们必须在项目中添加 composer.json 文件。

如果模块是 drupal.org 上发布的模块,它依赖于其他模块,并且想要在开发过程中使用 DrupalCI 测试这些依赖的更改,那么它必须有一个 composer.json 文件来声明这些 Drupal 模块的依赖关系。(DrupalCI 只能检测 composer.json 中补丁的依赖更改,而不能检测 .info 或 .info.yml 文件中的更改。)

如果模块开发者希望使用 composer.json 提供的更灵活的版本约束(例如插入符号或波浪号运算符),这些功能只能在 composer.json 中实现。(虽然 Drupal 本身不会受这些约束影响,但如果最终用户使用 Composer 构建他们的网站,这些约束会在构建过程中被遵守。)

04/10/2025, by Ivan

在接下来的部分中,我们将讲解如何创建一个简单的模块。有一个由来已久的传统:当你在任何新系统中编写第一段程序时,它会在屏幕上输出 “Hello World!”

虽然 Drupal 是最具雄心和前瞻性的开源项目之一,但它也深深扎根于科学和工程领域的悠久传统之中。

在开始使用本分步指南中的代码之前,请按照这里的说明准备好模块框架:准备模块框架

Drupal 8 Interconnections 是一个演示页面,展示了模块组件之间的相互关系。

04/10/2025, by Ivan

HelloController 类中的 content() 方法将在路由系统调用页面时返回标记文本。

在你的模块目录中,应当有一个符合 PSR-4 标准的文件夹结构 /src/Controller,在该文件夹中你需要创建控制器文件 HelloController.php
因此,你的控制器文件路径应为
/src/Controller/HelloController.php

HelloController.php 文件中,你将拥有如下代码: