织梦DedeCMS实现自定义跳转链接的两种方法
在织梦CMS中,当文档的自定义属性设置为“跳转[j]”时,通常需要在页面中直接输出该文档的跳转链接作为a标签的href地址。以下是两种实现方法,分别适用于不同需求场景。
方法一:修改程序文件实现全局调用
此方法通过修改核心程序文件,使系统在生成文档链接时自动判断并返回跳转地址,调用标签不变,仍使用[field:arcurl/]。
打开 /include/helpers/channelunit.helper.php 文件,找到大约第61行的代码:
$articleUrl = GetFileName($aid,$typeid,$timetag,$title,$ismake,$rank,$namerule,$typedir,$money,$filename);
在这行代码的上方加入以下代码:
global $dsql;
$row = $dsql->GetOne("SELECT c.addtable FROM `dede_archives` AS a LEFT JOIN `dede_channeltype` AS c ON a.channel=c.id where a.id='$aid'");
$addtable = trim($row['addtable']);
$row = $dsql->GetOne("SELECT arc.flag,addf.redirecturl FROM `$addtable` addf LEFT JOIN `dede_archives` arc ON addf.aid=arc.id WHERE addf.aid=$aid");
if(preg_match("#j#", $row['flag']) && $row['redirecturl'])
{
return $row['redirecturl'];
}
保存文件后,前台调用标签保持不变,直接使用[field:arcurl/]即可输出跳转链接。
方法二:不修改程序文件,通过标签调用
此方法无需改动任何程序文件,通过标签参数和字段配置实现跳转链接的输出。
dede:arclist标签中调用跳转链接
在dede:arclist标签中,通过添加channelid和addfields参数来调用跳转地址字段。示例代码如下:
{dede:arclist typeid='2' row='10' channelid='1' addfields='redirecturl'}
<a href="[field:redirecturl/]">[field:title/]</a>
{/dede:arclist}
其中channelid=’1’中的1是模型ID,addfields=’redirecturl’中的redirecturl是跳转地址字段名,该字段存储在附加表中。


dede:list标签中调用跳转链接
在dede:list标签中使用跳转链接,需要先在后台进行字段配置。
第一步:进入内容模型管理,找到普通文章模型(或其他模型),在基本设置中的“列表附加字段”处添加redirecturl。

第二步:在字段管理中,添加模型字段配置(文本模式),输入以下代码:
<field:redirecturl itemname="跳转网址" type="text" isnull="true" islist="1" default="" rename="" />

完成以上两步配置后,即可在dede:list标签中直接使用[field:redirecturl/]调用跳转地址,示例代码如下:
{dede:list pagesize='10' titlelen='250'}
<a href="[field:redirecturl/]">[field:title/]</a>
{/dede:list}
注意:此方法不需要额外添加channelid和addfields参数。
处理非跳转文档的链接输出
如果文档未设置跳转属性,希望输出正常的文档链接,可以将href中的[field:redirecturl/]替换为以下代码,实现自动判断:
href="[field:array runphp=yes]@me = (@me['redirecturl'] == '' ? @me['arcurl'] : @me['redirecturl']);[/field:array]"
这样,当文档有跳转地址时输出跳转链接,否则输出默认的文档链接。
