下面我将为你提供两种方法,强烈推荐第一种方法,因为它更灵活、更符合织梦的设计理念,且不会修改核心文件。
使用自定义函数(推荐,最灵活)
这种方法的核心思想是:创建一个自定义函数,来获取指定分类ID下的友情链接,然后在栏目页模板中调用这个函数。
第1步:创建自定义函数文件
- 在你的织梦网站根目录下,找到
include/文件夹。 - 在
include/文件夹中,创建一个名为extend.func.php的文件。如果这个文件已经存在,则直接打开它进行编辑。 - 在
extend.func.php文件中,添加以下PHP代码:
/**
* 获取指定分类下的友情链接
* @param int $typeid 栏目ID
* @param int $typeid2 二级栏目ID (可选)
* @param int $linktype 链接类型 (1:文字, 2:图片, 0:所有)
* @param int $row 显示条数
* @return string 返回链接HTML代码
*/
function GetFlinksByType($typeid = 0, $typeid2 = 0, $linktype = 0, $row = 10)
{
global $dsql;
// SQL查询语句,从dede_flinktype和dede_flink表中获取数据
// 通过typeid字段关联,确保只获取当前分类下的链接
$sql = "SELECT a.*,btypename FROM dede_flink as a left join dede_flinktype as b on a.typeid=b.id WHERE (a.typeid='{$typeid}' OR a.typeid='{$typeid2}' OR b.typename like '{$typeid}') ";
if ($linktype > 0) {
$sql .= " AND a.linktype = '{$linktype}' ";
}
$sql .= " ORDER BY a.aid DESC LIMIT 0, {$row}";
$dsql->SetQuery($sql);
$dsql->Execute();
$text = '';
while ($row = $dsql->GetArray()) {
if ($row['linktype'] == 1) { // 文字链接
$text .= "<a href='{$row['url']}' target='{$row['target']}'>{$row['webname']}</a> ";
} else if ($row['linktype'] == 2) { // 图片链接
$text .= "<a href='{$row['url']}' target='{$row['target']}'><img src='{$row['logo']}' alt='{$row['webname']}' /></a> ";
}
}
return $text;
}
代码解释:
- 这个函数
GetFlinksByType接收四个参数:栏目ID、二级栏目ID、链接类型和显示数量。 - 它会查询
dede_flink和dede_flinktype这两张表。 - 关键在于
WHERE (a.typeid='{$typeid}' OR a.typeid='{$typeid2}' OR b.typename like '{$typeid}')这句,它会筛选出属于当前栏目ID的友情链接。 - 函数会返回一个包含链接HTML代码的字符串。
第2步:在后台添加栏目类型的友情链接
- 登录织梦后台。
- 进入【核心】 -> 【网站栏目管理】。
- 编辑你想要添加友情链接的栏目,新闻中心”栏目,记下它的栏目ID(假设为
5)。 - 进入【核心】 -> 【友情链接类型管理】。
- 点击“增加新类型”,在“类型名称”中输入你刚才的栏目ID(
5),然后保存,你可以为不同栏目创建不同的类型。
第3步:在后台添加友情链接并分类
- 进入【核心】 -> 【友情链接管理】。
- 点击“增加新链接”。
- 填写友情链接信息:
- 网站名称:织梦官网”
- 网址:例如
https://www.dedecms.com - 类型:选择你上一步创建的类型(例如ID为
5的类型,可能显示为“5”)。 - Logo:(可选,如果是图片链接)
- 其他信息:按需填写。
- 保存,你可以为这个栏目添加多个链接。
第4步:在栏目页模板中调用
- 进入【模板】 -> 【模板管理】。
- 在左侧选择你网站对应的模板风格。
- 找到并点击 【栏目列表页】 对应的模板文件(通常是
list_*.htm,list_5.htm)。 - 在你希望显示友情链接的位置,插入以下代码:
<div class="flink">
<h3>友情链接</h3>
<div class="flink-content">
{dede:field name='id' function='GetFlinksByType(@me, 0, 0, 20)'/}
</div>
</div>
代码解释:
{dede:field name='id'}:这是获取当前栏目的ID。function='GetFlinksByType(@me, 0, 0, 20)':这是调用我们第一步创建的自定义函数。@me:代表当前字段的值,也就是当前栏目的ID。0:第二个参数(二级栏目ID),我们这里用不到,设为0。0:第三个参数(链接类型),0代表显示所有类型(文字和图片),1只显示文字,2只显示图片。20:第四个参数(显示条数),你可以根据需要修改。
保存模板文件,然后到前台刷新对应的栏目页,你应该就能看到友情链接了。
修改核心文件(不推荐,有风险)
这种方法直接修改织梦的核心文件,实现起来简单,但会在下次织梦升级时被覆盖,需要重新修改,请谨慎操作。
第1步:修改 flink.lib.php 文件
- 打开
include/taglib/flink.lib.php文件。 - 找到
else if($type=='textall')这段代码(大约在第54行)。 - 在它下面,添加一个新的
else if分支,用于获取指定分类的链接。
修改后的 flink.lib.php 文件关键部分如下:
// ... (前面的代码保持不变) ...
else if($type=='textall')
{
$row = $dsql->GetOne("SELECT * FROM dede_flinktype");
$typeid = $row['id'];
$equery = "SELECT * FROM dede_flink WHERE typeid='$typeid' And ischeck=1 order by pos asc";
$link = "<a href='".$dblink['url']."' target='".$dblink['target']."'>".$dblink['webname']."</a> ";
}
// ====== 在这里添加新的代码 ======
else if($type == 'typeid')
{
// 获取typeid参数,如果没有则默认为0
$typeid = empty($typeid) ? 0 : $typeid;
$equery = "SELECT * FROM dede_flink WHERE typeid='$typeid' And ischeck=1 order by pos asc";
$link = "<a href='".$dblink['url']."' target='".$dblink['target']."'>".$dblink['webname']."</a> ";
}
// =================================
else
{
$equery = "SELECT * FROM dede_flink WHERE ischeck=1 order by pos asc";
$link = "<a href='".$dblink['url']."' target='".$dblink['target']."'>".$dblink['webname']."</a> ";
}
// ... (后面的代码保持不变) ...
第2步:在后台添加友情链接并分类
这一步与方法一的第2步和第3步完全相同,你需要为栏目创建对应的友情链接类型,并在添加链接时选择该类型。
第3步:在栏目页模板中调用
- 同样地,打开栏目列表页模板文件
list_*.htm。 - 在需要的位置插入调用代码:
<div class="flink">
<h3>友情链接</h3>
<div class="flink-content">
{dede:flink type='typeid' typeid=''}
{/dede:flink}
</div>
</div>
代码解释:
{dede:flink type='typeid' typeid=''}:我们指定了type='typeid',这会触发我们刚刚在核心文件中添加的逻辑。typeid='':这个标签的typeid属性是必须的,但它本身是空的,织梦的底层解析机制会自动将当前栏目的ID填入这个参数,从而实现调用当前分类的链接。
总结与对比
| 特性 | 方法一 (自定义函数) | 方法二 (修改核心) |
|---|---|---|
| 推荐度 | ⭐⭐⭐⭐⭐ (强烈推荐) | ⭐ (不推荐) |
| 安全性 | 高,不修改核心文件,安全。 | 低,修改核心文件,有被黑客利用的风险。 |
| 升级影响 | 无影响,升级后功能依然保留。 | 升级后会被覆盖,需要重新修改。 |
| 灵活性 | 高,可以自定义函数逻辑,如按类型、数量筛选。 | 低,逻辑固定,修改后灵活性差。 |
| 操作复杂度 | 稍高,需要创建函数文件。 | 简单,直接修改一个文件即可。 |
为了网站的长期稳定和可维护性,请优先选择方法一,虽然多了一个创建函数文件的步骤,但它是一劳永逸的最佳实践。
