Drupal 开发教程:从零到英雄
Drupal 是一个功能强大、高度灵活的开源内容管理系统,它的学习曲线相对陡峭,但一旦掌握,你将能够构建几乎任何类型的网站,从个人博客到复杂的社交网络和企业门户。

第一部分:准备工作
在开始编码之前,你需要准备好你的开发环境。
为什么选择 Drupal?
- 灵活性与可扩展性:通过“内容类型”、“字段”、“视图”等核心概念,你可以像搭积木一样构建网站,而无需编写大量代码。
- 强大的社区:拥有庞大而活跃的全球社区,提供丰富的文档、模块和主题。
- 安全性:Drupal 核心团队非常重视安全,定期发布安全更新。
- 多语言支持:内置强大的多语言功能,是构建国际网站的绝佳选择。
必需工具
- 本地服务器环境:Drupal 是一个 PHP 应用,需要一个 Web 服务器(如 Apache 或 Nginx)、数据库(如 MySQL/MariaDB)和 PHP 解释器。
- 推荐新手使用:XAMPP、WAMP (Windows) 或 MAMP (macOS),它们一键集成所有环境。
- 推荐专业开发者使用:Docker 和 DDEV,这是目前最流行、最专业的本地开发方式,可以完美模拟生产环境。
- 代码编辑器:一个强大的代码编辑器能极大提高效率。
- 推荐:Visual Studio Code (免费、功能强大)、PhpStorm (付费,PHP 开发神器)。
- 版本控制:Git 是现代开发的必备工具,用于代码管理和协作,请务必学习 Git 的基本命令。
- Composer:PHP 的依赖管理工具,Drupal 8/9/10 完全依赖 Composer 来管理其核心和第三方模块。
安装 Drupal
- 下载:访问 Drupal.org 下载最新的 Drupal 版本(目前是 Drupal 10)。
- 解压:将下载的压缩包解压到你本地服务器的 Web 根目录(XAMPP 的
htdocs文件夹)。 - 运行安装程序:在浏览器中访问
http://localhost/drupal(根据你的文件夹名调整)。 - 选择语言:选择 "English" 或其他语言。
- 检查要求:安装程序会检查你的 PHP 和数据库环境是否符合要求。
- 数据库配置:
- 输入数据库名称(
drupal)。 - 输入数据库用户名和密码(通常是你在 XAMPP/MAMP 中设置的
root和空密码)。 - 数据库主机通常是
localhost。
- 输入数据库名称(
- 安装配置:
- 站点名称:你的网站名称。
- 站点维护帐户:创建一个管理员账户。
- 国家/地区:设置默认时区。
- 安装完成:等待安装程序完成,然后你就可以登录你的新 Drupal 网站了!
第二部分:核心概念理解
这是 Drupal 开发最重要的部分,理解这些概念,你就能理解 Drupal 的工作方式。
核心三驾马车
这三个概念是 Drupal 架构的基石。
-
内容类型
(图片来源网络,侵删)- 是什么的“蓝图”或“模板”,它定义了某种类型的内容应该包含哪些信息(字段)。
- 例子:
文章:可能包含标题、正文、作者、发布日期、封面图片等字段。产品:可能包含产品名称、描述、价格、SKU、库存数量等字段。事件:可能包含事件名称、开始时间、结束时间、地点等字段。
- 如何创建:在
管理 > 结构 > 内容类型中创建。
-
字段
- 是什么:存储具体数据的最小单元,字段被附加到内容类型上。
- 类型:文本字段、数字字段、日期字段、文件字段、图片字段、实体引用字段等。
- 例子”是一个文本字段,“发布日期”是一个日期字段,“封面图片”是一个图片字段。
- 关键点:Drupal 的强大之处在于,你可以将任何字段添加到任何内容类型(甚至用户、 taxonomy 术语等)。
-
实体
- 是什么:Drupal 中任何可以被存储和管理的“东西”都是实体。
- 例子:
- 内容实体:一篇文章、一个产品、一个事件。
- 用户实体:一个用户账户。
- 词汇表/分类法实体:一个分类(如“标签”、“分类”)。
- 配置实体:一个视图、一个内容类型定义、一个区块。
- 关键点类型、字段、视图、区块等都是实体,这个统一的模型使得 Drupal 非常一致和可扩展。
重要概念
-
区块
- 是什么:一个可重用的 UI 组件,用于在网站的特定区域(如页头、页脚、侧边栏)显示内容。
- 可以是一段静态文本、一个菜单、一个视图列表,甚至是某个内容类型的最新文章列表。
- 如何管理:在
管理 > 结构 > 区块布局中,你可以将区块放置到不同的区域。
-
视图
(图片来源网络,侵删)- 是什么:Drupal 最强大的模块之一(即使它现在是核心的一部分),它允许你从数据库中查询内容,并以列表、表格、幻灯片等多种方式展示出来。
- 例子:
- 显示所有“产品”内容类型的项目列表。
- 显示按“分类”分组的文章。
- 创建一个带有“分页”和“筛选”功能的文章列表。
- 如何创建:在
管理 > 结构 > 视图中创建。
-
主题
- 是什么:控制网站外观和用户体验的层,它决定了 HTML 结构、CSS 样式和 JavaScript 行为。
- 工作原理:Drupal 使用“Twig”模板引擎,主题通过覆盖核心的 Twig 模板文件来改变输出。
- 如何创建:你可以基于
starterkit_theme(Olivero 或 Claro) 创建一个子主题,这是最佳实践。
-
模块
- 是什么:为 Drupal 添加新功能的插件,模块可以添加新的内容类型、字段类型、区块、权限,甚至改变 Drupal 的核心行为。
- 例子:
- Webform:创建复杂的表单。
- Paragraphs:更灵活地构建页面内容。
- Devel:开发辅助工具,用于调试和查看信息。
- 如何安装:通过 Composer 或在 Drupal 后台的
扩展页面安装。
第三部分:动手开发
让我们开始编写一些代码。
创建自定义模块
这是 Drupal 开发的起点,我们将创建一个名为 hello_world 的简单模块。
-
创建模块文件夹: 在 Drupal 安装目录的
modules/custom下创建一个名为hello_world的文件夹。/drupal/ └── modules/ └── custom/ └── hello_world/ -
创建
.info.yml文件: 这个文件告诉 Drupal 你的模块是什么。创建文件:
modules/custom/hello_world/hello_world.info.ymlname: 'Hello World' type: module description: 'A simple module to say hello.' core_version_requirement: ^10 package: 'Custom'
-
创建
.module文件: 这个文件包含 PHP 代码,我们在这里实现一个 "钩子"。创建文件:
modules/custom/hello_world/hello_world.module<?php /** * @file * Contains hello_world.module. */ /** * Implements hook_page_attachments(). * * This function is called when a page is being built. */ function hello_world_page_attachments(array &$attachments) { // Add a library to the page. // The library is defined in hello_world.libraries.yml. $attachments['#attached']['library'][] = 'hello_world/hello_world'; } -
创建库定义文件: 如果你的模块需要 CSS 或 JS,你需要在这里定义它们。
创建文件:
modules/custom/hello_world/hello_world.libraries.ymlhello_world: version: 1.x css: theme: css/hello-world.css: {} js: js/hello-world.js: {} -
创建 CSS 和 JS 文件: 创建文件夹
css和js,并分别创建hello-world.css和hello-world.js文件。modules/custom/hello_world/css/hello-world.css:body { border: 5px solid red; }modules/custom/hello_world/js/hello-world.js:console.log('Hello from Drupal!'); -
启用模块:
- 登录 Drupal 后台。
- 转到
管理 > 扩展。 - 找到 "Hello World" 模块,勾选并点击
安装。
刷新你的网站,你应该能看到页面边框变成了红色,并且浏览器控制台打印出了 "Hello from Drupal!",恭喜,你创建了第一个自定义模块!
创建自定义主题
-
创建主题文件夹: 在 Drupal 安装目录的
themes/custom下创建一个名为my_subtheme的文件夹。/drupal/ └── themes/custom/ └── my_subtheme/ -
创建
.info.yml文件: 创建文件:themes/custom/my_subtheme/my_subtheme.info.ymlname: 'My Subtheme' type: theme description: 'A subtheme of Olivero.' core_version_requirement: ^10 base theme: olivero # 关键:指定父主题
-
覆盖模板文件: 假设你想修改页面的 HTML 结构,你需要覆盖
page.html.twig。- 在
my_subtheme文件夹中创建templates文件夹。 - 从
core/themes/olivero/templates/page.html.twig复制page.html.twig文件到你的templates文件夹中。 - 编辑
templates/page.html.twig,修改你想要的部分。
- 在
-
启用主题:
- 转到
管理 > 外观。 - 选择 "My Subtheme" 并设置为默认主题。
- 转到
使用 Drupal Console (可选但推荐)
Drupal Console 是一个命令行工具,可以自动生成模块、主题、表单等的代码骨架,极大地提高开发效率,安装它后,你可以通过命令快速创建文件和结构。
第四部分:进阶主题
当你掌握了基础后,可以探索以下更高级的主题:
- 配置管理:学习如何将 Drupal 的配置(如内容类型、视图设置)导出到代码中,实现不同环境(开发、测试、生产)之间的一致性。
- Drupal API:深入学习 Drupal 的核心 API,如
EntityQuery(用于编程方式查询内容)、Form API(用于创建表单)、Routing(用于创建自定义页面路径)。 - Services & Dependency Injection:了解 Drupal 的服务容器,这是编写可测试、可维护代码的关键。
- 测试:学习使用 PHPUnit 和
Kahlan为你的代码编写单元测试和功能测试。
第五部分:学习资源
- 官方文档:
- Drupal.org Documentation: 最权威、最全面的资源。
- Drupal API Reference: 所有核心函数和类的文档。
- 社区与教程:
- Drupalize.me: 付费的高质量视频教程。
- Drupal Association: Drupal 官方协会,提供资源和支持。
- Localize Drupal: 参与 Drupal 的翻译工作。
- 书籍:
- The Definitive Guide to Drupal 7 (虽然旧,但概念相通)
- Pro Drupal Development (系列书籍,版本较多,是 Drupal 开发的经典)
Drupal 开发是一个持续学习的过程,不要试图一次性掌握所有东西。
学习路径建议:
- 安装并玩转 Drupal:熟悉后台界面,创建内容类型、添加字段、使用视图和区块。
- 创建你的第一个模块:从简单的钩子开始,理解模块是如何工作的。
- 创建你的第一个主题:学习如何覆盖模板和样式,控制网站外观。
- 深入学习 API:当你需要实现更复杂的功能时,去查阅 API 文档,学习 Form API、EntityQuery 等。
- 阅读和贡献:阅读优秀模块的源码,尝试为 Drupal 贡献代码或文档。
祝你 Drupal 开发之旅愉快!
