dede当前文章标签如何实现?

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

使用 DedeCMS 内置标签 {dede:tag}(推荐)

这是最标准、最安全的方法,符合 DedeCMS 的模板引擎规则,您可以在文章内容页模板(article_article.htm)中直接使用。

dede 当前文章标签
(图片来源网络,侵删)

基础用法

这个标签会以“,”逗号分隔的形式,输出当前文章的所有标签。

在模板文件 article_article.htm 中,您希望显示标签的位置加入以下代码:

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

代码解释:

  • {dede:tag} ... {/dede:tag}:这是标签的开始和结束。
  • [field:tag/]:这是标签的名称,织梦CMS”、“PHP教程”。
  • [field:tagurl/]:这是该标签的链接地址,点击后会跳转到标签列表页面,显示所有包含该标签的文章。

样式与分隔符定制

您可以通过 sortgetall 属性来控制标签的输出方式。

dede 当前文章标签
(图片来源网络,侵删)

自定义分隔符(默认是逗号)

如果您不想用逗号,可以用 getall='0' 来指定自定义的分隔符。

{dede:tag getall='0'}
[field:tag/] |  <!-- 使用 " | " 作为分隔符 -->
{/dede:tag}

按字母顺序排序

如果您希望标签按字母顺序排列,可以添加 sort='asc' 属性(asc 为升序,desc 为降序)。

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

显示所有标签(不推荐)

getall='1' 会将所有标签合并成一个字符串,并用逗号分隔,但失去了 <a> 链接结构,通常不用于直接显示标签列表。

{dede:tag getall='1'}
[field:tag/]
{/dede:tag}

使用 PHP 代码(灵活但需谨慎)

这种方法适用于更复杂的逻辑,或者在某些非标准模板位置(如首页、列表页)调用文章标签时使用。请注意,直接在模板中写 PHP 代码需要确保您的服务器环境支持,并且操作不当可能导致网站不安全。

页(article_article.htm)中使用

<?php
// 获取当前文章的ID
$aid = $arcID;
// 引入数据库配置文件
// 如果在系统核心文件中,此步可省略
// require_once(DEDEROOT.'/data/common.inc.php');
// 查询该文章的所有标签
$dsql->SetQuery("SELECT tag FROM `dede_taglist` WHERE aid = '$aid'");
$dsql->Execute();
$tags = array();
while ($row = $dsql->GetArray())
{
    $tags[] = "<a href='/tags.php?/".$row['tag']."'>".$row['tag']."</a>";
}
// 用逗号将标签数组连接成字符串
$tag_str = implode(', ', $tags);
// 输出标签
echo $tag_str;
?>

代码解释:

  1. $aid = $arcID;:获取当前文章的ID,$arcID 是 DedeCMS 在文章内容页中预设的全局变量。
  2. dede_taglist:这是存储文章与标签关联关系的核心数据表。
  3. SELECT tag FROM ... WHERE aid = '$aid':从数据库中查询出指定文章ID对应的所有标签名称。
  4. implode(', ', $tags):将 PHP 数组中的标签用 连接成一个字符串。
  5. echo $tag_str;:最终输出带有链接的标签列表。

在首页或列表页调用某篇文章的标签(高级用法)

如果您想在首页或列表页循环中调用某篇文章的标签,可以结合 {dede:arclist} 标签和 PHP 代码实现。

{dede:arclist titlelen='30' row='5'}
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <!-- 在这里调用当前文章的标签 -->
    <div class="tags">
        <?php
        $aid = $fields['id']; // 获取当前循环文章的ID
        $dsql->SetQuery("SELECT tag FROM `dede_taglist` WHERE aid = '$aid'");
        $dsql->Execute();
        $tags = array();
        while ($row = $dsql->GetArray())
        {
            $tags[] = "<a href='/tags.php?/".$row['tag']."'>".$row['tag']."</a>";
        }
        echo implode(', ', $tags);
        ?>
    </div>
{/dede:arclist}

注意: 这种方法在列表页循环调用数据库,会严重影响网站性能,不推荐在列表页使用,尤其是在 row 值较大时。


总结与建议

特性 {dede:tag} PHP 代码
易用性 非常高,一行代码搞定。 较低,需要懂 PHP 和数据库结构。
安全性 ,官方推荐,经过严格测试。 较低,直接操作数据库有风险,需注意 SQL 注入。
灵活性 一般,只能满足常规需求。 非常高,可以实现任何自定义逻辑。
性能 ,由模板引擎高效解析。 较低,特别是循环调用时,会增加数据库负担。
适用场景 页 (article_article.htm),99% 的需求。 非标准页面、复杂逻辑、与其他 PHP 变量交互时。

最终建议:

  • 如果您只是在文章详情页显示标签,请务必使用方法一 {dede:tag} 这是最正确、最高效、最安全的方式。
  • 只有在方法一无法满足您的特殊需求时,才考虑使用方法二,并且在使用时要格外小心,确保代码的健壮性和安全性。
-- 展开阅读全文 --
头像
汽车销售企业织梦模板如何快速搭建?
« 上一篇 03-18
织梦网站备份还原具体咋操作?
下一篇 » 03-18
取消
微信二维码
支付宝二维码

目录[+]