在用户访问表单页面时,将当前页面的URL作为一个隐藏字段插入到表单中,然后在表单提交时,获取这个隐藏字段的值。
下面我将为你提供两种最常用且有效的方法,并附上详细的步骤说明。
使用织梦自带的/plus/diy.php功能(推荐)
这是织梦最原生、最简单的方法,无需修改核心文件,安全且易于维护。
操作步骤:
-
创建表单并添加隐藏字段
- 登录织梦后台,进入【核心】 -> 【内容模型管理】 -> 【普通文章】(或其他你对应的模型)。
- 点击【增加字段】。
- 填写字段信息:
- 字段名称:
sourceurl(小写,英文,不要用特殊字符) - 字段类型:
单行文本 - 字段提示:
来源网址(这个在前台表单中会显示为提示文字) - 前台提交表单替换html代码: 这里留空,因为我们不需要用户输入。
- 后台表单替换html代码: 这里也留空。
- 是否显示:
否 - 是否必填:
否 - 保存。
- 字段名称:
-
修改表单模板文件
- 找到你用于展示表单的模板文件(
templets/plus/post_diyform.htm,或者你自定义的页面模板)。 - 在
<form>标签内部,<input type="submit">按钮之前,添加以下代码:
<input type="hidden" name="sourceurl" value="{dede:php}echo urlencode($_SERVER['HTTP_REFERER']);{/dede:php}" />代码解释:
<input type="hidden">: 创建一个隐藏的输入框,用户在页面上看不到它。name="sourceurl": 这个name必须和你第一步在后台创建的字段名称完全一致。value="...": 这里是核心,我们使用织梦的{dede:php}标签来执行PHP代码。$_SERVER['HTTP_REFERER']: 这是PHP中的一个超全局变量,它包含了链接到当前页面的前一页面的URL(即来源网址)。urlencode(): 强烈建议使用这个函数对URL进行编码,这样可以避免来源URL中包含&、 等特殊字符时,对表单提交造成干扰。
- 找到你用于展示表单的模板文件(
-
提交并测试
- 保存模板文件,然后访问你的表单页面。
- 检查页面源代码,你应该能看到
<input type="hidden" name="sourceurl" value="..." />这一行,value属性里已经填上了你访问该表单页面的网址。 - 填写并提交表单。
- 进入织梦后台,在【核心】 -> 发布】 -> 【自定义表单管理】 中,你就能看到提交的数据,来源网址”那一栏已经有了值。
通过修改 /plus/diy.php 文件(更灵活)
如果你想在提交表单后,将来源网址记录到数据库的其他字段,或者需要进行更复杂的处理,可以直接修改 diy.php 文件。
操作步骤:
-
修改
/plus/diy.php文件- 使用FTP或文件管理器,打开
/plus/diy.php文件。 - 找到处理表单数据的代码段,通常在
$diy->save($addarr, $diy->table);这一行之前。 - 在这里插入获取来源网址的代码。
// 在这行代码之前添加 // $diy->save($addarr, $diy->table); // 获取来源网址 if(isset($_POST['sourceurl']) && !empty($_POST['sourceurl'])) { // 如果来源网址是通过隐藏字段提交的 $addarr['sourceurl'] = $_POST['sourceurl']; } else if(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER'])) { // 如果来源网址是直接通过HTTP_REFERER获取的(作为备选方案) $addarr['sourceurl'] = $_SERVER['HTTP_REFERER']; } else { // 如果都没有来源,可以设置为空或'直接访问' $addarr['sourceurl'] = '直接访问'; } // --- 保存数据 --- $diy->save($addarr, $diy->table); - 使用FTP或文件管理器,打开
-
创建对应的数据库字段
- 和方法一的第一步一样,你需要在数据库的自定义表单表中增加一个字段来存储来源网址。
- 登录织梦后台,进入【系统】 -> 【SQL命令行工具】。
- 执行以下SQL语句(请将
dede_diyform1替换为你自己的自定义表单表名,可以通过查看自定义表单管理页面获取):
ALTER TABLE `dede_diyform1` ADD `sourceurl` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '来源网址';
- 注意:
dede_diyform1是默认的表名,如果你的表单名称是“留言反馈”,那么表名可能是dede_diyform_liuyan之类的,请务必确认你的表名。VARCHAR(255)是字段类型和长度,可以根据需要调整。NOT NULL DEFAULT ''表示该字段不能为空,默认值为空字符串。
-
前台表单处理
- 使用方法一中的第2步,在前台表单模板中添加隐藏字段,这是最规范的做法。
-
<input type="hidden" name="sourceurl" value="{dede:php}echo urlencode($_SERVER['HTTP_REFERER']);{/dede:php}" /> - 这样,当用户提交表单时,
$_POST['sourceurl']就会有值,diy.php中的代码就能正确捕获并保存它。
总结与对比
| 特性 | 方法一 (修改模板) | 方法二 (修改php文件) |
|---|---|---|
| 优点 | - 无需修改核心文件,安全,升级无忧 - 操作简单,符合织梦的设计理念 |
- 更灵活,可以处理更复杂的逻辑 - 不完全依赖前台隐藏字段,有备选方案 |
| 缺点 | - 功能相对固定 | - 需要修改核心文件,升级时可能被覆盖 - 操作稍复杂,需要懂一点SQL |
| 适用场景 | - 大多数普通需求,快速实现 | - 需要对数据进行额外处理或记录 - 对系统稳定性要求极高,不希望修改核心文件时 |
推荐首选方法一,因为它简单、安全且足够应对绝大多数情况,只有在方法一无法满足你的特殊需求时,才考虑使用方法二。
希望这个详细的教程能帮到你!如果在操作中遇到任何问题,欢迎随时提问。
