织梦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是跳转地址字段名,该字段存储在附加表中。

CMSROI模板网
CMSROI模板网

dede:list标签中调用跳转链接

在dede:list标签中使用跳转链接,需要先在后台进行字段配置。

第一步:进入内容模型管理,找到普通文章模型(或其他模型),在基本设置中的“列表附加字段”处添加redirecturl。

CMSROI模板网

第二步:在字段管理中,添加模型字段配置(文本模式),输入以下代码:

<field:redirecturl itemname="跳转网址" type="text" isnull="true" islist="1" default="" rename="" />

CMSROI模板网

完成以上两步配置后,即可在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]"

这样,当文档有跳转地址时输出跳转链接,否则输出默认的文档链接。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。