logo

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

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

演示 EBT 模块 下载 EBT 模块

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

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

演示 EPT 模块 滚动

滚动

Drupal WebForm 模块:创建商品订购表单

14/10/2025, by Ivan

让我们回到之前课程中创建的商品目录。目录已经成功填充并正常显示,但通过联系表单下单相当不便——需要复制商品名称和商品代码,然后再粘贴到表单中填写信息。现在我们来创建一个能简化下单流程的表单。为此,我们需要使用 Webform 模块,该模块用于在 Drupal 中创建自定义表单。通过此表单,我们将传递商品名称和数量。如果你还需要传递商品代码,可以使用类似的方法。

下载并安装 Webform 模块。

安装后,系统中会出现一个新的内容类型 Webform。创建一个 Webform 类型的内容,并命名为 商品订购表单(或任意你喜欢的名称)。创建完成后,你将被重定向到该 Webform 的配置页面。

我们需要为商品名称和数量创建两个字段,因此添加两个 textfield(文本字段)。

在“商品名称”字段中填写 %get[product]

Drupal webform

在“数量”字段中,将默认值设置为 “1”。

此外,还应添加一个用于客户邮箱的文本字段(text field)和一个用于客户留言或特殊要求的文本区域(text area)。

%get[product] 类似于 PHP 变量 $_GET['product'],用于从 URL 获取参数值。

表单准备就绪后,我们需要创建一个指向该表单的链接,并为链接添加参数 product,用于传递商品名称。我们将此链接放入一个独立的区块中,并将其显示在每个商品节点的底部。

接下来的操作需要启用内置模块 PHP filter,它允许在区块或内容中直接插入 PHP 代码。启用后,你会看到新的输入格式 “PHP code”。

创建一个新的区块,并选择输入格式 “PHP code”。在区块文本中插入以下代码:

<a href="<?php print base_path(); ?>node/6?product=<?php print drupal_get_title(); ?>">订购商品</a>

其中 node/6 是商品订购表单的节点地址。

drupal_get_title() 函数返回当前节点的标题,在这里标题即为商品名称;base_path() 函数返回网站的根路径(例如 drupalbook.org/)。接下来,将此区块放置在 “内容 (Content)” 区域中,并在 PHP 模式下设置区块的可见性条件如下:

$types['tovar'] = 1;
$match = false;
if ((arg(0) == 'node') && is_numeric(arg(1))) {
  $node = node_load(arg(1)); 
  $match = isset($types[$node->type]); 
} 
return $match;

其中 tovar 是商品内容类型的机器名称。

这样,我们的商品订购表单就制作完成了。