核心SQL语句
无论哪种方法,核心都是对 dede_flink 这张数据表进行查询,以下是该表的主要字段:

id: 链接ID (主键)typename: 链接类型 (1:图片, 2:文字)webname: 网站名称url: 网站地址logo: Logo图片地址msg: 备注信息typeid: 链接分类ID (如果使用了分类功能)ischeck: 是否通过审核 (1:是, 0:否)orderid: 排序号 (数字越大越靠前)
直接使用SQL标签(最基础)
这是最直接的方法,适用于简单的、不需要复杂逻辑的场景,在Dede的模板文件( 场景:在首页的某个位置,直接调用所有已审核的友情链接。 代码示例: 代码解析: DedeCMS内置了专门的友情链接标签 场景:调用所有链接,或者调用指定分类ID的链接。 调用所有已审核的友情链接 调用指定分类的友情链接 假设你后台的友情链接分类中,"网站"分类的ID是 当Dede自带的标签无法满足复杂需求时(需要自定义查询逻辑、进行二次开发或整合到其他系统中),可以在PHP文件中直接执行SQL并循环输出。 场景:在自定义的PHP页面中,获取友情链接数据并渲染成HTML。 步骤: 代码示例 ( 给你的建议:.htm)中使用 {dede:sql}
<div class="friend-links">
<h3>友情链接</h3>
<ul>
{dede:sql sql="SELECT id, webname, url, logo, typename FROM dede_flink WHERE ischeck = 1 ORDER BY orderid ASC"}
<li>
[field:typename function="(@me == 1) ? '<a href=\"~url~\" target=\"_blank\"><img src=\"~logo~\" alt=\"~webname~\" /></a>' : '<a href=\"~url~\" target=\"_blank\">~webname~</a>' /]
</li>
{/dede:sql}
</ul>
</div>
{dede:sql sql="..."}:执行自定义的SQL查询。SELECT id, webname, url, logo, typename FROM dede_flink WHERE ischeck = 1 ORDER BY orderid ASC:
WHERE ischeck = 1:只调用审核通过的链接。ORDER BY orderid ASC:按 orderid 字段升序排列(数字小的在前)。[field:typename function="..." /]:这是关键,它调用了 typename 字段,并使用PHP函数进行判断。
function="(@me == 1) ? '...' : '...'":这是一个三元运算符。@me(即当前行的 typename 值)等于 1(表示图片链接),则执行 '<a href=\"~url~\" target=\"_blank\"><img src=\"~logo~\" alt=\"~webname~\" /></a>'。1(表示文字链接),则执行 '<a href=\"~url~\" target=\"_blank\">~webname~</a>'。~url~, ~webname~, ~logo~:这是DedeSQL标签中字段的特殊调用方式,等同于 [field:url/]。
使用Dede自带的友情链接标签(推荐)
{dede:flink},这是最官方、最稳定、也最推荐的方法,因为它更符合Dede的底层逻辑,并且可以方便地调用分类。
<div class="friend-links">
<h3>友情链接</h3>
<ul>
{dede:flink row='20' type='text'}
<li><a href="[field:url/]" target="_blank">[field:webname/]</a></li>
{/dede:flink}
</ul>
</div>
1,"个人"分类的ID是 2。
<div class="friend-links">
<h3>网站友情链接</h3>
<ul>
{dede:flink typeid='1' row='10' type='text'}
<li><a href="[field:url/]" target="_blank">[field:webname/]</a></li>
{/dede:flink}
</ul>
<h3>个人友情链接</h3>
<ul>
{dede:flink typeid='2' row='10' type='text'}
<li><a href="[field:url/]" target="_blank">[field:webname/]</a></li>
{/dede:flink}
</ul>
</div>
{dede:flink} 标签常用属性:
typeid: 分类ID,多个ID用逗号隔开,如 typeid='1,2',不写则调用所有分类。row: 调用条数,如 row='20' 表示调用20条。type: 链接类型。
text: 只调用文字链接。image: 只调用图片链接。self: 调用所有类型的链接(默认值),len 网站名称长度,如titlelen='20'`,超过长度的部分用省略号代替。linktype: 链接类型(与 type 类似,但 type 更常用)。orderby: 排序方式,默认是 orderid(后台设置的顺序),也可以使用 rand(随机排序)。
结合PHP和SQL(最灵活)
index.php 或自定义的 my_page.php)。my_page.php):<?php
require_once (dirname(__FILE__) . "/include/common.inc.php"); // 引入Dede核心文件
// 1. 准备SQL查询
$sql = "SELECT id, webname, url, logo, typename
FROM dede_flink
WHERE ischeck = 1
ORDER BY orderid ASC";
// 2. 执行查询,获取结果集
$dsql->SetQuery($sql);
$dsql->Execute();
// 3. 循环输出结果
echo '<div class="friend-links">';
echo '<h3>友情链接</h3>';
echo '<ul>';
while($row = $dsql->GetArray())
{
$link_id = $row['id'];
$webname = $row['webname'];
$url = $row['url'];
$logo = $row['logo'];
$typename = $row['typename'];
// 判断是图片链接还是文字链接
if ($typename == 1) {
// 图片链接
echo "<li><a href=\"{$url}\" target=\"_blank\"><img src=\"{$logo}\" alt=\"{$webname}\" /></a></li>";
} else {
// 文字链接
echo "<li><a href=\"{$url}\" target=\"_blank\">{$webname}</a></li>";
}
}
echo '</ul>';
echo '</div>';
// 关闭数据库连接(可选,Dede脚本结束时通常会自动关闭)
$dsql->Close();
?>
总结与建议
方法
优点
缺点
适用场景
SQL标签
灵活,可以直接写任何SQL语句。
语法稍复杂,可读性较差,安全性需要注意(防止SQL注入)。
简单调用,或在模板中快速实现一些Dede标签无法完成的功能。
自带标签
最推荐,官方支持,稳定,标签属性丰富,易于使用和维护。
灵活性相对较低,无法执行非常复杂的自定义SQL。
绝大多数情况,尤其是在模板文件中调用友情链接。
PHP+SQL
最灵活,可以结合PHP的强大功能,实现任何复杂逻辑。
需要修改PHP文件,对新手不友好,不适合模板层直接使用。
自定义页面开发、二次开发、与其他系统集成等。
{dede:flink}),这是最标准、最不容易出错的方式。{dede:sql}) 可以胜任。
