- 修改模板文件(推荐,最灵活)
- 修改核心文件(一劳永逸,但需要谨慎)
修改模板文件(推荐)
这种方法不需要修改DedeCMS的核心程序,所有逻辑都在模板文件中完成,非常安全且灵活,你可以只在需要显示下拉框的页面使用这个标签。

(图片来源网络,侵删)
第1步:在模板文件中创建下拉框HTML结构
在你需要显示友情链接的地方,footer.htm(页脚模板)文件中,添加以下HTML代码。
<div class="flink">
<h3>友情链接</h3>
<form action="{dede:global.cfg_cmspath/}/plus/flink.php" method="get" target="_blank">
<select name="action" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value="">-- 选择友情链接 --</option>
{dede:flink type='text' row='30'}
<option value="[field:url/]">[field:webname/]</option>
{/dede:flink}
</select>
</form>
</div>
第2步:代码解释
<form ...>: 创建一个表单。action指向了DedeCMS自带的友情链接处理页面flink.php,method="get"是标准的提交方式。<select ...>: 这是下拉框的主体。onchange="document.location.href=this.options[this.selectedIndex].value;": 这是核心的JavaScript代码,当下拉框的选项改变时,它会自动跳转到所选选项的value值(也就是友情链接的网址)。<option value="">-- 选择友情链接 --</option>: 这是一个默认的提示选项,用户点击下拉框时会看到。
{dede:flink ...}: 这是DedeCMS的友情链接调用标签。type='text': 表示调用文字形式的链接,虽然我们用的是下拉框,但底层还是调用链接数据,所以这个类型依然适用。row='30': 表示最多调用30个友情链接,你可以根据需要修改这个数字。[field:url/]: 输出友情链接的网址,作为<option>的value属性。[field:webname/]: 输出友情链接的网站名称,作为下拉框中显示给用户看的内容。
第3步:CSS样式美化(可选)
为了让下拉框更美观,你可以在模板的CSS文件中添加一些样式,在 style.css 中添加:
/* 友情链接下拉框样式 */
.flink select {
padding: 5px 10px; /* 内边距 */
font-size: 14px; /* 字体大小 */
border: 1px solid #ccc; /* 边框 */
border-radius: 4px; /* 圆角 */
background-color: #fff; /* 背景色 */
cursor: pointer; /* 鼠标指针变为手型 */
}
修改核心文件(一劳永逸)
如果你希望全站的友情链接调用都默认是下拉框形式,并且不想在每个模板里都写一遍HTML,可以修改DedeCMS的核心文件。修改核心文件后,升级DedeCMS时这些修改可能会被覆盖,所以请务必备份原文件。
第1步:找到核心文件
你需要修改的文件是:/include/taglib/flink.lib.php

(图片来源网络,侵删)
第2步:修改文件内容
打开 flink.lib.php 文件,找到 function lib_flink 这段函数代码,默认情况下,它只返回一个简单的列表。
你需要将函数内部的逻辑修改为返回下拉框的HTML代码。
找到类似这样的代码(不同版本可能略有差异):
// ... 前面的代码 ...
$artlist = "";
if($type=='text')
{
$artlist = "<div class=\"dede-flink\">\n";
for($i=0; $i<$row; $i++)
{
if($dsql->GetRow($dsql->SetQuery("SELECT * FROM `#@__flink` WHERE ischeck=1 ORDER BY id DESC LIMIT $i,1")))
{
$dbrow = $dsql->GetRow();
$artlist .= "<a href='".$dbrow['url']."' target='_blank'>".$dbrow['webname']."</a> \n";
}
}
$artlist .= "</div>";
}
else if($type=='pic')
{
// ... 图片链接的逻辑 ...
}
// ... 后面的代码 ...
我们将 type=='text' 部分的代码替换为生成下拉框的代码。
修改后的 type=='text' 部分应该是这样的:
// ... 前面的代码 ...
$artlist = "";
if($type=='text')
{
// 生成下拉框的HTML
$artlist = "<select name=\"friend_link\" onchange=\"window.open(this.options[this.selectedIndex].value);\">\n";
$artlist .= "<option value=\"\">-- 选择友情链接 --</option>\n"; // 默认选项
// 循环输出友情链接
for($i=0; $i<$row; $i++)
{
if($dsql->GetRow($dsql->SetQuery("SELECT * FROM `#@__flink` WHERE ischeck=1 ORDER BY id DESC LIMIT $i,1")))
{
$dbrow = $dsql->GetRow();
// 将网址和名称作为option的value和显示文本
$artlist .= "<option value=\"".$dbrow['url']."\">".$dbrow['webname']."</option>\n";
}
}
$artlist .= "</select>";
}
else if($type=='pic')
{
// ... 图片链接的逻辑保持不变 ...
}
// ... 后面的代码 ...
第3步:在模板中调用
修改完核心文件后,你现在可以在任何模板文件中,使用非常简洁的标签来调用友情链接下拉框了。
<div class="flink">
<h3>友情链接</h3>
{dede:flink type='text' row='20'}
</div>
这样,{dede:flink type='text'} 这个标签就会直接输出一个完整的、功能可用的下拉框了。
总结与建议
| 特性 | 方法一 (修改模板) | 方法二 (修改核心) |
|---|---|---|
| 优点 | 安全,不影响核心程序。 灵活,可以只在特定页面使用。 升级DedeCMS时不会被覆盖。 |
一劳永逸,全站统一。 模板代码非常简洁。 |
| 缺点 | 需要在每个需要添加的模板文件中重复编写HTML和JS。 如果样式复杂,CSS也需要单独管理。 |
有风险,修改了核心文件。 升级程序后需要重新修改。 不够灵活,无法定制不同页面的样式。 |
| 适用场景 | 大多数情况,特别是新手或需要定制化设计的网站。 | 全站风格统一,且不常升级程序的网站。 |
推荐使用方法一,因为它更安全、更灵活,是Web开发中的最佳实践,只有在确认你确实需要全局统一且不介意修改核心文件时,才考虑使用方法二。
