dede list如何调用tag标签?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文

调用当前栏目下所有文章的标签(最常用)

这种方法会在列表页显示该栏目下所有文章关联的标签,它通过获取当前栏目的 ID,然后查询数据库中所有属于该栏目的文章,再获取这些文章的标签。

适用场景: 展示一个“热门标签”或“相关标签”板块,让用户快速了解本栏目的主题。

实现步骤:

  1. 打开你的列表模板文件,通常是 /templets/default/list_*.htm (list_article.htm)。
  2. 在你想要显示标签的位置,加入以下 PHP 代码和 DedeCMS 标签。

代码示例:

{dede:list pagesize='10'}
    <!-- 这里是你的列表内容,比如文章标题 -->
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:list}
<!-- 在列表内容结束后,添加以下代码来调用标签 -->
<div class="tags-list">
    <h3>本栏目标签</h3>
    <ul>
        <?php
        // 1. 获取当前栏目ID
        $typeid = $GLOBALS['typeid'];
        // 2. 查询该栏目下所有文章的ID
        $dsql->SetQuery("SELECT id FROM `dede_archives` WHERE typeid = '$typeid'");
        $dsql->Execute('t');
        $tagids = array();
        while ($row = $dsql->GetArray('t')) {
            $tagids[] = $row['id'];
        }
        $tagids_str = implode(',', $tagids);
        // 3. 如果该栏目下有文章,则查询这些文章的标签
        if (!empty($tagids_str)) {
            $dsql->SetQuery("SELECT tag FROM `dede_taglist` WHERE aid IN ($tagids_str) GROUP BY tag ORDER BY count DESC");
            $dsql->Execute('t2');
            while ($row2 = $dsql->GetArray('t2')) {
                // 4. 获取标签的URL
                $tagurl = GetTagUrl($row2['tag']);
                echo "<li><a href='{$tagurl}'>{$row2['tag']}</a></li>";
            }
        }
        ?>
    </ul>
</div>

代码解释:

  1. $typeid = $GLOBALS['typeid'];:获取当前页面的栏目 ID。
  2. 第一段 SELECT 查询:从 dede_archives (文章列表表) 中找出所有属于当前栏目的文章 ID。
  3. implode(',', $tagids);:将文章 ID 数组转换成逗号分隔的字符串,用于 IN 查询。
  4. 第二段 SELECT 查询:从 dede_taglist (标签关系表) 中查询出这些文章关联的所有标签,GROUP BY tagORDER BY count DESC 用于合并重复标签并按使用次数排序。
  5. GetTagUrl($row2['tag']);:这是 DedeCMS 的内置函数,用于根据标签名生成标签页的 URL。
  6. echo "<li>...</li>";:循环输出每个标签的链接。

调用当前文章的标签(在文章页 article_*.htm

虽然你的问题是关于列表页,但这个方法非常基础且重要,作为补充。

适用场景: 在文章详情页,显示与当前文章相关的标签。

实现步骤:

  1. 打开文章详情模板 /templets/default/article_*.htm
  2. 在合适位置加入以下代码。

代码示例:

<div class="article-tags">
    <span>标签:</span>
    {dede:tag type='current'/}
</div>

{dede:tag} 标签属性说明:

  • type='current':表示调用当前文章的标签。
  • getall='0':默认为 0,表示调用当前文章的标签,设为 1 可以调用全站的热门标签。
  • row='20':调用的标签数量。
  • length='12':标签字符长度,超过部分用省略号表示。

更灵活的写法(可以自定义样式):

{dede:tag type='current' row='8' getall='0'}
    <a href="[field:tagurl/]">[field:tag/]</a>
{/dede:tag}

在列表页循环调用每篇文章的标签(不推荐,性能差)

这种方法会为列表页的每一篇文章都单独查询一次标签,然后显示在文章标题旁边。

警告: 这种方法在文章数量较多时会产生大量的数据库查询,严重影响网站性能(N+1 查询问题)。仅适用于列表页文章数量极少(5 篇以内)的情况。

代码示例:

<ul>
    {dede:list pagesize='10'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <!-- 在文章标题后面加上标签 -->
            <span class="article-tags">
                {dede:tag row='5' getall='0'}
                    <a href="[field:tagurl/]">[field:tag/]</a>
                {/dede:tag}
            </span>
        </li>
    {/dede:list}
</ul>

总结与推荐

方法 优点 缺点 推荐度
方法一 性能好,只查询两次数据库,代码灵活,可自定义排序和样式。 逻辑稍复杂,需要写 PHP 代码。 ⭐⭐⭐⭐⭐ (强烈推荐)
方法二 代码极其简单,是 DedeCMS 的原生功能。 仅适用于文章详情页。 ⭐⭐⭐⭐⭐ (文章页必备)
方法三 使用简单,原生标签。 性能极差,文章多时网站会卡死。 ⭐ (不推荐,仅在特殊情况下使用)

对于你的需求“dede list 调用 tag”,强烈建议使用方法一,它兼顾了功能实现和网站性能,是专业开发者的首选。

-- 展开阅读全文 --
头像
dede bshare分享插件
« 上一篇 01-05
c语言运行helloworld
下一篇 » 01-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]