logo

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

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

演示 EBT 模块 下载 EBT 模块

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

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

演示 EPT 模块 滚动

滚动

在 Drupal 中创建模块,快速入门

14/10/2025, by Ivan

我们从 api.drupal.org 开始,打开钩子 hook_node_presave() 的页面,它会在节点(node)添加之前触发。

http://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_validate/7

钩子允许我们将自定义代码嵌入 Drupal 的正常执行流程中,例如添加验证、数据字段、表单元素等。

在目录 sites/all/modules 中添加我们的模块:

Drupal 7 模块由哪些部分组成?

14/10/2025, by Ivan

在开始创建我们的模块之前,我还要简单介绍一下 Drupal API 的一些功能。API 提供了强大的功能,用于处理分类(Taxonomy)、节点(Node)、用户(User)、数据库的输入和输出等。为了让模块与 Drupal 核心以及模块之间相互交互,Drupal 提供了一个“钩子(Hook)”系统。钩子是一种回调机制,也就是说,当代码执行到钩子时,会调用我们在自己模块中定义的函数,从而“插入”自定义代码。通过这种方式,我们可以处理用户数据、菜单、分类、不同内容类型的节点等。

在以下页面中:

http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7

Drupal 7 hook_block_info() 和 hook_block_view() 在区块中输出信息

14/10/2025, by Ivan

在上一课中,我们为 Drupal 7 创建了一个模块,而在本课中,我们将继续扩展模块的功能。我们将通过 hook_block_view()hook_block_info() 添加一个区块(block)输出。在这个区块中,将显示站点上最近注册的用户列表,并附带指向他们个人页面的链接。

我们先来看一下 hook_block_info() 的说明:

定义由模块创建的所有区块。

此钩子在 Drupal 中用于定义模块将输出哪些区块,同时还可以描述区块的显示设置。

hook_block_info() 中,模块的每个区块都会获得一个唯一的标识符 "delta"(即返回数组的键)。该 delta 值在模块中必须唯一,并用于以下场景:

Hook_menu Drupal 7 通过模块创建页面

14/10/2025, by Ivan

在上一课中,我们学习了如何通过 Drupal API 从数据库中输出信息,具体来说使用了钩子 hook_block_info()hook_block_view()。在本课中,我们将学习如何输出页面,也就是使用钩子 hook_menu,将页面连接到 Drupal 的其他部分,如菜单、翻译模块、模板等。

我们从简单的开始,创建一个页面,用于输出最近 10 条新闻的标题和描述。这样就能得到一个简短的新闻列表。我们将使用 hook_menu()。以下是它的说明,之后我们会进行实际使用。

hook_menu()

定义菜单项并返回页面。

当模块中调用此钩子时,它会注册路径,并指定 Drupal 处理的顺序。路径既可以仅用于处理请求,也可以被添加到菜单中,例如导航菜单。路径及其相关信息称为 menu router item。此钩子只在特定情况下被调用(例如启用模块时),其结果会被缓存到数据库中。因此,在修改模块中的钩子后,通常需要清除缓存。

hook_permission Drupal 7 不同角色的访问权限

14/10/2025, by Ivan

在之前的课程中,我们已经在不同位置输出了页面和区块,并且使用了 access argumentsaccess callback 属性来设置页面访问限制。在本课中,我们将创建一种更灵活的方式,通过管理页面来编辑操作的访问权限。为此,我们将使用 hook_permission()(在 Drupal 6 中该钩子名为 hook_perm())。

hook_permission()

定义用户的权限。

该钩子可以添加权限,使您的模块能够定义哪些权限会出现在用户权限页面上。同时,该钩子还可用于控制模块执行的动作(actions)的全部或部分访问。

权限通过 user_access() 函数进行检查。

返回值

返回一个数组,其键是权限名称,对应的值是包含以下键值对的数组:

title:权限的可读名称,会显示在权限页面上。此值应使用 t() 函数包装,以便可以被翻译成其他语言。

Form API Drupal 7 —— 在 Drupal 中创建表单

14/10/2025, by Ivan

在前几节课程中,我们已经学习了钩子 hook_block_info()hook_block_view()hook_menu()hook_permission(),因此我们现在已经能够通过编程方式创建任意数量的页面和区块。而在本节中,我们将学习 Drupal 7 的 Form API,用于创建表单。我们将创建一个用于模块管理的表单,并尽量使用我们已经掌握的钩子来巩固知识。

首先,我们输出 3 个区块,这对你来说应该已经不难了:

Drupal 6/7 网站主题化:模板由哪些部分组成?

14/10/2025, by Ivan

大家好!

希望你们已经学习了 HTMLCSS 的基础入门课程。现在,你们已经准备好根据 PSD 设计稿来创建自己的 Drupal 主题了。以下是 HTML 和 CSS 教程的链接:

HTML

CSS

接下来的视频课程一开始可能会有些难理解,但别担心——我们会在后续的课程中详细解释每个部分。如果暂时有些地方不明白,请随时回到这篇文章,它可以作为你的参考资料。

 

Drupal 主题化 第 1 课:Zen 主题的 Readme 文件

14/10/2025, by Ivan

从哪里开始?

太好了!你首先打开了正确的文件。许多人在下载 Zen 主题 后注意到的一件事是,这个主题包含的文件数量远远多于其他主题。

别担心!你不需要一开始就了解所有内容就能 创建一个 Drupal 主题

Zen 会为你提供你之前不知道的知识,并耐心等待你阅读它的文档与注释。

什么是基础主题(Base Theme)、子主题(Sub-theme)和起始主题(Starter Theme)?

通常,学习某个系统的最佳方式是查看现有的示例并对其进行修改,从而理解它的工作原理。但这种学习方式的一个主要缺点是:如果在修改过程中出了问题,而原始示例在修改前运行正常,那么其他人帮助你的积极性就会很低。

Drupal 的主题系统很好地解决了这个问题——通过「父主题」和「子主题」的机制。「子主题」会继承其「父主题」(也称为基础主题)中的所有 HTML 标记、CSS 和 PHP 代码。而在 Drupal 中,子主题可以仅替换父主题中你希望修改的部分。