Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

分类目录(父级目录)文章数统计错误 #7095

Open
4 tasks done
17lhf opened this issue Nov 30, 2024 · 20 comments
Open
4 tasks done

分类目录(父级目录)文章数统计错误 #7095

17lhf opened this issue Nov 30, 2024 · 20 comments
Labels
area/core Issues or PRs related to the Halo Core area/theme Issues or PRs related to the Theme Provider kind/bug Categorizes issue or PR as related to a bug.

Comments

@17lhf
Copy link

17lhf commented Nov 30, 2024

前置条件

  • 已经在 issues 列表中搜索了相关问题。
  • 这是 Halo 项目本身存在的问题,如果是非项目本身的问题(如:安装部署问题),建议在 Discussions 提交。
  • 已经尝试过停用所有的插件,排除是插件导致的问题。
  • 如果是插件和主题的问题,请在对应的插件和主题仓库提交。

系统信息

使用的哪种方式运行?

Fat Jar

发生了什么?

  • 已检查未对子分类开启“阻止文章级联查询”。
  • 所有文章只归属单个“子分类”,未设置归属多个“子分类”或者同时归属“父分类”。
  • 部分文章开启了 “私有”,目测下来“私有”文章不显示在访客页面的目录栏统计里(此时子分类的统计数已经自动过滤了私有文章),应该也不是这个的问题。
  • 目前发现现象:父分类的文章统计数显示, 控制台的管理页面访客浏览页面,都有 部分父分类显示文章数统计值错误
    Image
    Image
  • 目前不清楚是不是版本升级导致的历史数据遗留问题?还是实时统计出错?

复现步骤

No response

相关日志输出

附加信息

  • 现在虽然父分类文章数显示错误(显示不对,或者为0),但是实际在访客页面选择这个父分类的话(从 “分类目录” 中选择),是可以看到显示完整的所有子分类文章。例如虽然显示数目是 0 ,但是实际观察是显示了所有子分类加在一起的 25篇文章。(印象中 1.x 版本的时候,大概是24年上半年的时候,点击父分类,若没有把文章直接同时归属父分类,是不会显示子分类文章的来着?)
  • 另外,实测,假如我把某篇文章同时归属 子分类 和 父分类,则父分类的文章统计数将变成 1。然后我再把这个文章改为只归属子分类(去除归属父分类),则父分类文章统计数将变成 0 .(上图中那个父分类文章数 = 0 ,就是这么弄出来的)
@ruibaby
Copy link
Member

ruibaby commented Dec 4, 2024

cc @guqing

/kind bug
/area core

@f2c-ci-robot f2c-ci-robot bot added kind/bug Categorizes issue or PR as related to a bug. area/core Issues or PRs related to the Halo Core labels Dec 4, 2024
@guqing
Copy link
Member

guqing commented Dec 4, 2024

我通过以下能够查询文章数汇总的表达式显示了第一层级的文章数量如下图左侧红框所示

<p th:each="category : ${categoryFinder.listAsTree()}">
  <span th:text="${category.spec.displayName}"></span>
  <span th:text="${category.postCount}"></span>
</p>

Image

因此可以看出 earth 主题可能是没有使用后端计算的数量

需要注意的是:
在 Console 用户界面中,分类下显示的文章数量仅统计该分类本身直接关联的文章数量,不包含其子分类的文章数量。这样可以更加直观地查看每个分类的具体文章数。例如:

  • 如果文章 A 直接属于分类 摘录,则 摘录 的文章数量为 1。
  • 如果文章 A 属于子分类 常规摘录,而 摘录 本身没有直接关联的文章,则 摘录 的文章数量为 0。

所以需要确认两点:

  1. @17lhf 关于你图中 摘录 分类所属的直接关联文章是否确实为 0,以及 风袭异录 的直接关联文章是否确实为 35,并关注上述文章数量计算规则是否与实际数量情况符合,如果根据规则数量还是不正确则为 bug
  2. @ruibaby 需要确认以下 earth 的分类数量显示是怎么计算的,是否为后端的问题

@ruibaby
Copy link
Member

ruibaby commented Dec 4, 2024

需要确认以下 earth 的分类数量显示是怎么计算的,是否为后端的问题

不是算的,直接取的 status.visiblePostCounthttps://github.com/halo-dev/theme-earth/blob/f5d2d756162c8fc5675dba8ac7fffa2f3c04fa3c/templates/modules/category-tree.html#L11

这个 status.visiblePostCountpostCount 到底应该怎么区分呢,这很容易造成误导,文档也没有写明白这个问题,现在一共三个代表文章数量的字段。

Image

@guqing
Copy link
Member

guqing commented Dec 4, 2024

这个 status.visiblePostCountpostCount 到底应该怎么区分呢,这很容易造成误导,文档也没有写明白这个问题,现在一共三个代表文章数量的字段。

Image

status 中的文章数量是属于分类的直接关联的,postCount 是所有(包括私有、草稿、回收站),而 visiblePostCount 用在主题端是公开的文章数量,外层的 postCount 是属于分类树的节点的会汇总子节点文章数量,在主题端使用一般不需要去关系 status 中的值,永远取外层的即可一般都会提供在 VO 中,比如 CategoryVo 和 CategoryTreeVo 都是有在外层提供 postCount 直接用,不需要告诉主题开发者 status 有什么

@ruibaby
Copy link
Member

ruibaby commented Dec 4, 2024

但我感觉这样还是有点混乱,和其他地方有些区别,并且有些字段本来就是要在 status 获取的,比如 permalink。

any way,先改文档吧,晚点我检查所有主题的写法。

@guqing
Copy link
Member

guqing commented Dec 4, 2024

但我感觉这样还是有点混乱,和其他地方有些区别,并且有些字段本来就是要在 status 获取的,比如 permalink。

any way,先改文档吧,晚点我检查所有主题的写法。

确实需要改一下文档,把字段的作用介绍清楚就好了,虽然主题也可以直接取 status.visiblePostCount 但是也分场景,因为如果是平铺的话那就是取这个字段合适,如果是树状那就是外层的 postCount 合适,这取决于具体用途

@ruibaby
Copy link
Member

ruibaby commented Dec 4, 2024

能全部改成外层的 postCount 吗?不管是不是平铺

@guqing
Copy link
Member

guqing commented Dec 4, 2024

能全部改成外层的 postCount 吗?不管是不是平铺

可以,分类和标签都可以,如果是 CategoryTreeVo 外层 postCount 就是汇总的,CategoryVo适合平铺场景是单独的,TagVo也有,因此对于分类和标签的文档,可以隐去 status 中的部分字段的文档不写已简化理解成本

f2c-ci-robot bot pushed a commit to halo-dev/theme-earth that referenced this issue Dec 4, 2024
修复分类下文章数量显示不正确的问题。

See halo-dev/halo#7095

/kind bug

```release-note
修复分类下文章数量显示不正确的问题。
```
f2c-ci-robot bot pushed a commit to halo-dev/docs that referenced this issue Dec 4, 2024
统一分类和标签的文章数量字段。

See halo-dev/halo#7095

```release-note
None
```
@17lhf
Copy link
Author

17lhf commented Dec 4, 2024

  1. @17lhf 关于你图中 摘录 分类所属的直接关联文章是否确实为 0,以及 风袭异录 的直接关联文章是否确实为 35,并关注上述文章数量计算规则是否与实际数量情况符合,如果根据规则数量还是不正确则为 bug

我并未给父级分类(摘录风袭异录)设置直接关联的文章,实际应该都是0。按照我 issue 的附加信息所述操作,可以将文章数回归到 0。
issue 里提及的相关操作:

实测,假如我把某篇文章同时归属 子分类 和 父分类,则父分类的文章统计数将变成 1。然后我再把这个文章改为只归属子分类(去除归属父分类),则父分类文章统计数将变成 0 .(上图中那个父分类文章数 = 0 ,就是这么弄出来的)

不过我有个问题,就是如果正确应该是都为0,为什么浏览页面点击父分类,展示却是所有子分类的文章?这是否相互矛盾?

@guqing
Copy link
Member

guqing commented Dec 4, 2024

不过我有个问题,就是如果正确应该是都为0,为什么浏览页面点击父分类,展示却是所有子分类的文章?这是否相互矛盾?

参考 halo-dev/theme-earth#224 主题端如果展示为树状结构应该取汇总的文章数量显示会更合适,earth 主题已经修改等待发版即可

如果不想让主题点击分类时展示子分类关联的文章可以勾选阻止级联

@ruibaby
Copy link
Member

ruibaby commented Dec 5, 2024

已经在 https://github.com/halo-dev/theme-earth/releases/tag/v1.12.2 中修复此问题。

@ruibaby ruibaby closed this as completed Dec 5, 2024
@ruibaby ruibaby added the area/theme Issues or PRs related to the Theme Provider label Dec 5, 2024
@17lhf
Copy link
Author

17lhf commented Dec 6, 2024

@ruibaby @guqing
Image
我更新到了 Earth v1.12.2 ,试过刷新页面,也重新打开过浏览器,现在统计数据仍旧是错误的。
明显和实际数量对不上,像是错位读取数据了?

@ruibaby
Copy link
Member

ruibaby commented Dec 6, 2024

确实看起来有点不对,我在手动调整了 demo.halo.run 的数据之后,显示也不正确:

Console:

Image
Image
Image

主题:

Image

@ruibaby
Copy link
Member

ruibaby commented Dec 6, 2024

/reopen

@f2c-ci-robot f2c-ci-robot bot reopened this Dec 6, 2024
Copy link

f2c-ci-robot bot commented Dec 6, 2024

@ruibaby: Reopened this issue.

In response to this:

/reopen

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@guqing
Copy link
Member

guqing commented Dec 7, 2024

确实看起来有点不对,我在手动调整了 demo.halo.run 的数据之后,显示也不正确:

主题:

Image

mock 直接关联 33 halo直接关联34
halo 直接关联 64 那么在主题端 mock 汇总包含子分类的文章数量 33+34+64=131不是正确的吗?@ruibaby

参考 #7095 (comment)

@ruibaby
Copy link
Member

ruibaby commented Dec 7, 2024

看第一张图,现在没有文章直接设置 Mock 这个分类

@guqing
Copy link
Member

guqing commented Dec 10, 2024

Hi @17lhf 目前测试了没有复现出来,首先需要确认一下 Console 的分类的数量显示是否是正确的,Console 分类关联的文章数量包含的有回收站,私有,公开,草稿这几种的文章

@ruibaby
Copy link
Member

ruibaby commented Dec 10, 2024

确实看起来有点不对,我在手动调整了 demo.halo.run 的数据之后,显示也不正确:

Demo 环境应该是旧版本的数据有问题,重新调整之后没有再复现。

@17lhf
Copy link
Author

17lhf commented Dec 10, 2024

指的是 Console 里各个分类显示的文章数 和 首页看到的是否一致吗?
我以一个父分类为例吧:

  1. 这是否是因为 分类目录(父级目录)文章数统计错误 #7095 (comment) 提到的原因导致的呢,可以尝试先通过跟新对应文章的分类来触发更新将数量恢复到正确值,比如分类 A 的数量不正确,post-a 属于分类 A 那么先将它取消归属分类 A 来触发分类 A 的数量更新得到正确的值,以此类推,当分类的数量都正确后尝试重新复现一下这个问题看能否复现,以排除是以前版本计算不正确导致的,如果可以复现那么给出一个最小复现步骤

  2. 先不去管主题那边显示的数量是否符合预期,需要先确保 Console 的分类显示的数量是始终正确的(Console 的数量是直接关联分类的文章数)如果 Console 的数量没有 bug 再以此为依据去探讨主题那边的数量显示是否正确的问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/core Issues or PRs related to the Halo Core area/theme Issues or PRs related to the Theme Provider kind/bug Categorizes issue or PR as related to a bug.
Projects
None yet
Development

No branches or pull requests

3 participants