织梦如何调用当前文章的tag标签?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 织梦建站 正文

核心原理

织梦的文章标签系统是通过一个关联表 dede_archives_tag 来实现的,这个表存储了文章ID(aid)和标签ID(tid)的对应关系,调用当前文章的Tag,核心步骤就是:

织梦调用当前文章tag
(图片来源网络,侵删)
  1. 获取当前文章的ID($aid)。
  2. 根据这个$aid,查询 dede_archives_tag 表,找出所有对应的标签ID(tid)。
  3. 根据查出的标签ID,再查询 dede_tagindex 表,获取标签的名称(tagname)和链接(link)。
  4. 将这些标签以您想要的格式(如列表、逗号分隔等)输出到页面上。

使用官方提供的 {dede:tag} 标签(最简单、推荐)

这是织梦官方内置的标签,专门用于获取当前文章的Tag,使用起来最简单,无需任何PHP代码。

适用场景:在文章内容页(article_article.htm)中调用。

基本语法

{dede:tag}
    <a href='[field:tagurl/]'>[field:tagname/]</a>
{/dede:tag}

代码解析

织梦调用当前文章tag
(图片来源网络,侵删)
  • {dede:tag}...{/dede:tag}:这是一个循环标签,会自动循环输出当前文章的所有标签。
  • [field:tagurl/]:输出该标签的链接地址。/tags.php?/标签名/
  • [field:tagname/]:输出该标签的名称。

示例1:默认样式(每个标签一行)

<p>本文标签:</p>
<ul>
    {dede:tag}
    <li><a href='[field:tagurl/]'>[field:tagname/]</a></li>
    {/dede:tag}
</ul>

示例2:逗号分隔样式

如果希望所有标签在同一行,并用逗号隔开,可以这样写:

<p>本文标签:{dede:tag}[field:tagname/]{/dede:tag}</p>

注意:这种写法会直接在每个标签名后面输出,没有分隔符,如果需要逗号,可以在循环外面处理,或者使用更灵活的方法二。


使用自定义函数(最灵活)

当官方标签无法满足您的复杂需求时(需要自定义链接、添加样式、或调用到非文章内容页),可以编写一个自定义函数。

适用场景

  • 需要对标签进行复杂格式化(如添加CSS类、自定义链接)。
  • 在列表页、首页等其他页面调用当前文章的Tag(不推荐,但技术上可行)。
  • 需要在标签之间添加自定义分隔符(如逗号、竖线)。

操作步骤

  1. 创建自定义函数文件/include/helpers/ 目录下创建一个新文件,extend.helper.php,如果这个文件已经存在,直接在其中添加代码即可。

  2. 在文件中添加函数代码

    extend.helper.php 文件中,加入以下PHP函数:

    <?php
    if(!defined('DEDEINC')) exit('Request Error!');
    /**
     * 获取当前文章的所有标签
     * @param int $aid 文章ID
     * @param string $style 输出样式,默认为 'a',输出为链接
     * @param string $sep 分隔符,默认为空
     * @return string
     */
    function GetTags($aid, $style = 'a', $sep = '')
    {
        global $dsql;
        $tags = '';
        $query = "SELECT tag FROM `dede_tagindex` a LEFT JOIN `dede_archives_tag` b ON a.id=b.tid WHERE b.aid='$aid'";
        $dsql->Execute('me', $query);
        while($row = $dsql->GetArray('me'))
        {
            if($style == 'a')
            {
                $tags .= "<a href='/tags.php?/".$row['tag']."/'>".$row['tag']."</a>" . $sep;
            }
            else
            {
                $tags .= $row['tag'] . $sep;
            }
        }
        $tags = trim($tags, $sep);
        return $tags;
    }
    ?>

    代码解析

    • 函数名 GetTags 可以自定义。
    • $aid:需要传入文章ID。
    • $style:控制输出格式。'a' 表示输出为<a>链接,其他值(如空)则只输出标签名。
    • $sep:标签之间的分隔符, 或 。
    • 函数会查询数据库并拼接好最终的HTML字符串。
  3. 在模板中调用函数

    在您的文章内容页模板(article_article.htm)中,使用 {dede:field} 标签来调用这个函数。

    示例1:调用函数并传入文章ID

    {dede:field.id function='GetTags(@me)'/}

    这里的 @me 会自动替换为当前字段的值,也就是文章ID。

    示例2:调用函数并指定分隔符

    <p>标签:{dede:field.id function='GetTags(@me, "", ",")'/}</p>

    这将输出类似:标签:织梦,CMS,教程

    示例3:调用函数并输出为链接,带CSS样式

    <div class="article-tags">
        {dede:field.id function='GetTags(@me, "a", " | ")'/}
    </div>

    这将输出类似:

    <div class="article-tags">
        <a href='/tags.php?/织梦/'>织梦</a> | <a href='/tags.php?/CMS/'>CMS</a> | <a href='/tags.php?/教程/'>教程</a>
    </div>

直接使用SQL查询(不推荐,但作为了解)

这种方法直接在模板中写SQL语句,非常灵活,但也破坏了织梦标签的封装性,可读性差,且不易维护。除非您有特殊需求,否则不推荐使用。

适用场景:需要极度的自定义,且不想创建新函数。

代码示例

{dede:sql sql='SELECT tag FROM `dede_tagindex` a LEFT JOIN `dede_archives_tag` b ON a.id=b.tid WHERE b.aid=~aid~'}
<a href='/tags.php?/[field:tag/]/'>[field:tag/]</a>
{/dede:sql}

注意~aid~ 是织梦模板引擎中的一个特殊变量,会自动被替换为当前文章的ID,这种方法虽然能实现,但可读性和维护性远不如前两种方法。


总结与推荐

方法 优点 缺点 推荐度
{dede:tag} 最简单、最官方,代码清晰,无需额外操作。 灵活性较低,难以自定义复杂格式和分隔符。 ★★★★★ (在文章内容页首选)
自定义函数 最灵活,可完全控制输出格式、样式和分隔符。 需要创建和修改PHP文件,对新手稍复杂。 ★★★★☆ (需要自定义时强烈推荐)
直接SQL 极度灵活,无需创建文件。 可读性差,不易维护,破坏了模板结构。 ★☆☆☆☆ (仅作为最后的技术备选)

给您的建议

  • 如果您只是在文章内容页显示标签,请直接使用 方法一,这是最标准、最正确的做法。
  • 如果您想给标签添加特定的CSS类(如 class="tag"),或者想用逗号、竖线等符号优雅地分隔标签,请使用 方法二,这是最专业和可扩展的做法。
-- 展开阅读全文 --
头像
织梦CMS建手机版具体步骤是什么?
« 上一篇 01-29
ampz安装dede模板步骤是什么?
下一篇 » 01-29

相关文章

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

目录[+]