织梦tag文章数量如何显示?

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

下面我将为你提供几种方法,从最简单、最推荐的方法到更深入的修改方法,并解释其原理。

使用织梦内置的 GetTags 函数(最推荐)

这是最简单、最安全且官方推荐的方法,它利用了织梦的缓存机制,性能最好,这个函数专门用于获取一个文档或频道相关的标签列表,并可以附带文章数量。

适用场景: 在列表页(如栏目页、首页、搜索页等)的循环中,为每篇文章显示它所包含的标签及其数量。

操作步骤:

  1. 找到你需要显示标签数量的模板文件。

    • 首页模板:/templets/default/index.htm
    • 栏目列表页:/templets/default/list_article.htm
    • 页:/templets/default/article_article.htm
  2. 在文章循环标签 {dede:arclist} 内部,使用 {dede:tag} 标签来调用。

  3. 核心代码:

    {dede:arclist titlelen='30' row='10'}
      <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
      <p>[field:description function='cn_substr(@me,100)'/]...</p>
      <!-- 在这里添加标签和数量显示 -->
      <div class="tags">
        标签:
        {dede:tag sort='hot' getall='0'}
          <a href="[field:tagurl/]">[field:tagname/]([field:total/])</a>
        {/dede:tag}
      </div>
      <hr />
    {/dede:arclist}

代码解释:

  • {dede:arilogyist}: 这是织梦的文章列表循环标签。
  • {dede:tag}: 这是嵌套在 arclist 内部的标签调用标签。
    • sort='hot': 可选参数,表示按标签热度排序,你也可以使用 sort='count' 按文章数量排序。
    • getall='0': 可选参数,表示只获取当前文章的标签,设为 1 则会获取所有标签,通常不推荐。
    • [field:tagurl/]: 标签的链接地址。
    • [field:tagname/]: 标签的名称。
    • [field:total/]: 这就是关键! 这个字段会自动显示当前标签关联的文章数量。

效果示例: 如果一篇文章被标记了 "织梦CMS" 和 "网页制作","织梦CMS" 这个标签下共有50篇文章,"网页制作" 下有20篇,那么显示效果就会是: 标签:<a href="/tags.php?/织梦CMS/">织梦CMS(50)</a><a href="/tags.php?/网页制作/">网页制作(20)</a>


在标签列表页显示每个标签的文章数量

这个场景是:你有一个专门的标签聚合页(通常是 tags.php),你想在这个页面上列出所有标签,并且每个标签后面都跟它对应的文章总数。

适用场景: 自定义的标签云页面或标签列表页。

操作步骤:

  1. 找到标签列表模板文件,通常位于 /templets/default/taglist.htm

  2. {dede:tag} 循环中使用 total 字段。

  3. 核心代码:

    <h2>所有标签</h2>
    <div class="tag-cloud">
      {dede:tag sort='count' row='100' getall='1'}
        <a href="[field:tagurl/]" title="[field:total/]篇文章">
          [field:tagname/]
          <span class="count">([field:total/])</span>
        </a>
      {/dede:tag}
    </div>

代码解释:

  • {dede:tag}: 直接使用标签循环,不嵌套在 arclist 里。
    • sort='count': 非常重要,这里按文章数量 (count) 排序,让热门标签排在前面。
    • row='100': 设置显示的标签数量,0 或不设置表示显示全部。
    • getall='1': 非常重要,表示获取系统中的所有标签。
    • [field:total/]: 同样是显示每个标签对应的文章总数。

CSS样式建议: 为了让标签云更美观,你可以添加一些CSS来控制不同数量标签的样式。

.tag-cloud a {
  display: inline-block;
  margin: 5px;
  padding: 3px 8px;
  background-color: #f0f0f0;
  border-radius: 3px;
  text-decoration: none;
  color: #333;
}
/* 文章数量越多的标签,字体越大、颜色越深 */
.tag-cloud a span.count {
  font-size: 0.8em;
  color: #777;
  margin-left: 3px;
}
/* 可以通过JS或更复杂的CSS来实现动态样式,这里简单举例 */

修改PHP文件(不推荐,仅作了解)

如果你想在非文章循环的地方(比如自定义的页面模块)也显示标签数量,GetTags 函数无法满足需求,你可能需要直接修改PHP文件。这会破坏织梦的封装性,升级时可能被覆盖,请谨慎操作。

原理: 织梦标签的底层逻辑在 /include/helpers/archive.helper.php 文件中的 GetTags() 函数里,你可以修改这个函数,让它默认返回包含数量的数据。

操作步骤(高风险):

  1. 备份你的网站和 /include/helpers/archive.helper.php 文件。

  2. 打开 /include/helpers/archive.helper.php 文件。

  3. 找到 GetTags() 函数(大约在第580行)。

  4. 修改SQL查询语句,让它 COUNT 文章数量。

    原始代码片段可能类似这样:

    $query = "SELECT tag FROM `dede_taglist` WHERE aid='$aid' ";
    // ...
    $tags = '';
    while($row = $dsql->GetArray($this->dsql->SetQuery($query)))
    {
        $tags .= ($tags=='' ? $row['tag'] : ','.$row['tag']);
    }
    return $tags;

    修改后(思路示意): 你需要将这个函数重写或修改,使其 JOIN dede_tag 表来获取 count 字段,这非常复杂,且容易出错。

更安全的“伪修改”方法: 创建一个自定义函数,然后在模板里调用。

  1. /include/extend.func.php 文件(如果没有就创建一个)中加入以下函数:

    /**
     * 获取指定标签的文章数量
     * @param string $tagname 标签名
     * @return int
     */
    function getTagCount($tagname) {
        global $dsql;
        $tagname = addslashes($tagname);
        $row = $dsql->GetOne("SELECT count FROM `dede_tag` WHERE tag like '{$tagname}'");
        return isset($row['count']) ? $row['count'] : 0;
    }
  2. 在你的模板文件中,可以直接调用这个函数:

    {dede:tag sort='hot' row='10'}
      标签: [field:tagname/] - 数量: {dede:field name='tagname' function="getTagCount(@me)"/}
    {/dede:tag}

    注意: 这种方法在循环中调用PHP函数,性能不如方法一,因为它无法利用缓存,仅在特殊情况下使用。

总结与建议

方法 优点 缺点 推荐度
方法一 简单、安全、高效、利用缓存 只能在 arclist 循环内使用 ⭐⭐⭐⭐⭐ (首选)
方法二 官方标准做法,适合标签列表页 需要在特定模板文件中操作 ⭐⭐⭐⭐⭐ (用于标签云页)
方法三 灵活性极高,可在任何地方调用 复杂、有风险、破坏封装、性能差 ⭐☆☆☆☆ (不推荐,除非万不得已)

对于绝大多数用户,方法一和方法二已经完全够用,请优先使用这两种方法,它们是织梦CMS设计的最佳实践。

-- 展开阅读全文 --
头像
织梦 首页标题 不显示
« 上一篇 今天
织梦表单如何自动发邮件?配置步骤是什么?
下一篇 » 今天

相关文章

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

目录[+]