这是一个非常常见的需求,尤其是在制作企业官网、产品展示、小说站等需要将用户引导到外部链接或站内其他页面的场景。

(图片来源网络,侵删)
核心思路是:在自定义模型中添加一个用于存储跳转地址的字段,然后在内容页模板中通过判断这个字段是否存在,来决定是显示正常内容还是执行跳转。
下面我将分步进行详细说明,包括两种主要跳转方式:JS跳转和Meta Refresh跳转。
第一步:创建自定义模型并添加跳转字段
你需要确保你已经创建好了你的自定义模型(产品、小说、外部链接等)。
-
进入模型管理:
(图片来源网络,侵删)- 登录织梦后台。
- 在左侧菜单栏找到
核心->内容模型管理。 - 点击
增加一个新模型。
-
填写模型基本信息:
- 模型名称:给你的模型起个名字,产品”。
- 表前缀:系统会自动生成,如
dede_后面加你的模型名缩写,如dede_archives_product,一般无需修改。 - 内容目录:存放此模型内容HTML文件的目录,
/product/。 - 模型表前缀:同上,无需修改。
- 其他选项根据需要填写,然后点击
确定。
-
添加跳转字段(最关键的一步):
- 在模型列表中,找到你刚刚创建的模型,点击右侧的
字段管理。 - 点击
增加新字段。 - 字段名:建议用英文,
jumpurl。(注意:字段名不能使用数据库关键字,如url,link等,jumpurl是一个安全的选择) - 字段类型:选择
单行文本。 - 字段提示:在后台添加内容时,这个提示会显示在输入框上方,请输入外部链接地址(留空则不跳转)”。
- 默认值:留空即可。
- 其他选项:如是否允许为空、是否在列表页显示等,根据你的需求设置,通常这里允许为空。
- 点击
保存。
- 在模型列表中,找到你刚刚创建的模型,点击右侧的
你的自定义模型已经有了存储跳转地址的字段 jumpurl。
第二步:修改内容页模板(article_article.htm)
这是实现跳转逻辑的核心,你需要编辑你的内容页模板文件,它通常位于 /templets/default/ 目录下,或者你当前使用的模板目录中。

(图片来源网络,侵删)
请务必在修改前备份原始的 article_article.htm 文件!
打开 article_article.htm 文件,找到 {dede:field.body/} 这个标签,它负责显示文章的正文内容,我们将在这里加入跳转逻辑。
以下是两种跳转方式的代码实现,你可以根据喜好选择一种。
使用 JavaScript (JS) 跳转 (推荐)
这种方式用户体验更好,可以先将页面内容加载出来,然后再跳转,或者提供一个“点击访问”的按钮。
代码示例:
{dede:field name='body'/}
<script type="text/javascript">
// 获取你在第一步中创建的字段值
var jumpUrl = "{dede:field.jumpurl/}";
// 判断 jumpUrl 是否为空
if (jumpUrl != '') {
// --- 这里提供两种跳转方式,任选其一 ---
// 方式A: 直接延迟跳转 (例如3秒后)
// setTimeout("window.location.href='" + jumpUrl + "'", 3000);
// 方式B: 提示并等待用户点击 (推荐,用户体验更好)
if(confirm("您即将离开本站,前往外部链接:" + jumpUrl + "\n\n是否继续?")) {
window.location.href = jumpUrl;
} else {
// 如果用户点击“取消”,可以什么都不做,或者返回首页等
// window.location.href = '/';
}
}
</script>
代码解释:
{dede:field name='body'/}:首先正常显示文章内容。<script type="text/javascript">:嵌入JavaScript代码。var jumpUrl = "{dede:field.jumpurl/}";:通过dede:field标签获取当前文章的jumpurl字段值,并赋值给 JavaScript 变量jumpUrl。if (jumpUrl != '') { ... }:判断jumpurl是否不为空,如果为空,说明不需要跳转,JavaScript代码块就不会执行。- 方式A (延迟跳转):使用
setTimeout函数,在页面加载3秒后自动跳转到jumpUrl指定的地址。 - 方式B (确认跳转):使用
confirm弹出一个确认对话框,如果用户点击“确定”,则执行跳转;如果点击“取消”,则什么都不做(或执行你设定的其他操作,如返回首页),这种方式更友好,让用户有选择权。
使用 HTML Meta Refresh 跳转
这种方式更简单,直接在HTML的<head>部分添加一个刷新指令。
代码示例:
<head>
<meta charset="utf-8">
...其他head标签...
{dede:field.jumpurl runphp='yes'}
if(@me != ''){
@me = "<meta http-equiv='refresh' content='3;url=".@me."'>";
} else {
@me = "";
}
{/dede:field.jumpurl}
</head>
<body>
...页面其他内容...
{dede:field.name/}
{dede:field.body/}
...页面其他内容...
</body>
代码解释:
- 这段代码放在
<head>和</head>之间。 {dede:field.jumpurl runphp='yes'}:对jumpurl字段进行PHP处理。runphp='yes'表示开启PHP执行。if(@me != ''):判断jumpurl的值是否为空。- 如果不为空,就生成一个
<meta http-equiv='refresh' content='3;url=...'>标签。content='3'表示3秒后跳转。 - 如果为空,则不生成任何东西。
- 这种方式的缺点是,如果字段为空,也会在head里留一个空的PHP判断,虽然不影响功能,但不够优雅。
第三步:使用与测试
- 更新缓存:在后台点击
系统->一键更新网站->更新缓存,确保模板修改生效。 - :
- 进入后台 ,选择你刚刚创建的自定义模型(如“产品”)。
- 、内容等基本信息。
- 在你新添加的“跳转地址”字段中,输入一个完整的URL,
https://www.example.com。 - 。
- 访问测试:
- 前台访问你刚刚发布的这篇内容的页面。
- 如果使用JS跳转(方案一):页面会显示正文,然后弹出确认框或等待几秒后跳转。
- 如果使用Meta跳转(方案二):页面会短暂显示正文,然后自动跳转到你设置的URL。
- 测试不跳转的情况:
- 再次进入编辑这篇内容,将“跳转地址”字段清空,然后更新。
- 再次访问前台页面,这次页面应该会正常显示所有内容,并且没有任何跳转行为。
总结与注意事项
- 推荐使用JS跳转(方案一):因为它更灵活,用户体验更好,可以通过
confirm对话框让用户自己决定是否跳转。 - 字段命名:确保你使用的字段名(如
jumpurl)在模板中与后台添加的字段名完全一致。 - URL格式:在后台填写跳转地址时,请务必填写完整的URL,包括
http://或https://。 - SEO考虑:如果大量页面被设置为无意义的外部跳转,可能会对网站SEO产生一定影响,请合理使用此功能。
- 备用方案:如果你只想对某些特定文章进行跳转,而不是整个模型,那么这个方法依然适用,只需在需要跳转的文章中填写地址,不需要跳转的文章留空即可。
通过以上步骤,你就可以成功地为织梦自定义模型实现内容页的跳转功能了。
