手机端带复选框的标签搜索不显示结果

:warning: 2023年8月说明: 此主题中的早期示例包含对不再存在的标签的引用,但空白结果的问题仍然存在。

如果您在手机上访问 https://meta.discourse.org/tags/c/theme/61/theme-component,点击放大镜,搜索例如“topic”,然后点击“搜索标签 Theme component”复选框,会出现两个问题。
一方面,您需要点击两次复选框才能选中它。另一方面,在点击一次或两次复选框后没有搜索结果,而在桌面搜索时有很多结果。

在不勾选复选框的情况下在手机上搜索


https://meta.discourse.org/search?context=tag&context_id=theme-component&q=Topic&skip_context=true

在手机上搜索并勾选复选框一次


https://meta.discourse.org/search?context=tag&context_id=theme-component&q=Topic&skip_context=false

在手机上搜索并勾选复选框两次


https://meta.discourse.org/search?context=tag&context_id=theme-component&q=Topic&skip_context=false

使用桌面视图搜索


https://meta.discourse.org/search?q=topic%20%23theme-component

我知道,我可以在手机上输入 Theme component 来获得搜索结果,但我认为这并不是提供复选框的初衷。

3 个赞

嘿,干得好,@moin。我认为你可能发现了 两个 bug。:slight_smile:

  1. 复选框无法立即生效,并且
  2. 将搜索范围限定为标签会创建一个 Discourse 返回 403 错误的路由

复选框未选中

在移动设备上,搜索链接会向 URL 添加“context”,这会显示要切换的复选框。在这种情况下,我们正在查看的 URL 是 https://meta.discourse.org/search?context=tag&context_id=theme-component&skip_context=true

当我们切换复选框时,我们正在更改搜索查询,其中 skip_contexttrue 更改为 false,然后再改回来。这也意味着你可以构造一个默认选中复选框的 URL,例如 <https://meta.discourse.org/search?context=category&context_id=1&skip_context=false>。这一点很重要,因为我注意到这两种状态在加载时表现不同。

skip_context=true

移动视图上的默认设置,复选框不会被选中。通过触摸或键盘与复选框交互会使 URL 变为 skip_context=false,但不会选中复选框。再次单击会选中它,并将“false”保留在 URL 中。

之后,它可以来回切换,并相应地更改 URL。

skip_context=false

加载搜索时,复选框被选中,并且与之交互按预期工作:每次交互都会更改复选框和 URL。


我另外注意到,使用这些复选框还会导致我失去页面焦点,无论 skip_context 的值如何;希望这是导致我们双击问题的同一件事。:slight_smile:

我在安全模式和移动设备上重现了此行为。

好的,我将在后续回复中解释标签无法限定范围的原因,以便在需要时可以轻松地将其分开。

4 个赞

搜索标签范围返回 403

这让我感到困惑,因为当我尝试在 meta 上重现它时,我不小心在搜索上下文中加载了一个类别而不是一个标签。这是幸运的,因为当我意识到我的错误时,我至少知道这些上下文的搜索查询是如何生成的。

使用 ThemeTheme component 作为示例:

当我们使用标签的搜索上下文时,我们的请求看起来像 \u003chttps://meta.discourse.org/search?q=topic\u0026page=1\u0026search_context[type]=tag\u0026search_context[id]=theme-component\u003e,它返回 403。

当我们使用类别的搜索上下文时,我们的请求看起来像 \u003chttps://meta.discourse.org/search?q=topic\u0026page=1\u0026search_context[type]=category\u0026search_context[id]=61\u003e,它按预期返回结果。

或者,如果我们从高级搜索过滤器中选择一个标签,我们的请求看起来像 \u003chttps://meta.discourse.org/search?q=tags:theme-component\u0026page=1\u003e,并返回带有该标签的结果。

我也能够在安全模式下重现 \u0026search_context[type]=tag\u0026search_context[id]=theme-component 路径返回 403 的情况。

是否存在其他 search_context 类型?我浏览了代码但无法确定;如果存在,我们也可以测试它们。

3 个赞

继续讨论 Discourse 订阅 - 允许预定长度的订阅

我本来想链接到我创建的带有 subscriptions 标签的帖子,所以我去了标签列表页面,然后从那里搜索。没有结果——见下图。当我从主页面搜索时,它工作正常。问题可能出在复选框上,因为这是一个区别。

1 个赞

我可以确认这一点。我刚刚尝试从 post-voting 标签进行搜索,并勾选了该选项,但找不到任何结果(@提及或其他常规关键字

Android/Chrome

(尚未在桌面端检查) 我已在桌面端检查过,一切正常。

这是我在这里报告的问题之一吗?

2 个赞

我没有问题勾选方框,但结果的缺乏似乎是同一个问题。

我已合并这些主题。:+1: (并稍微调整了 OP)。

在此处也做个记录;OP 中的示例标签已不存在,但它们演示的移动端空白搜索结果的问题仍然存在。

我的基本分步操作:

  • 在移动设备上,转到 post-voting 主题列表
  • 打开搜索并勾选 Search the #post_voting tag 复选框
  • 输入肯定会产生匹配项的内容(例如,“comment”或“@JammyDodger”)
  • 按下“搜索”

结果:“未找到结果

预期结果:找到内容

2 个赞

这确实是一个 bug,感谢大家的报告。此问题将在该 PR 合并后修复:FIX: Search by tag context was broken by pmusaraj · Pull Request #23006 · discourse/discourse · GitHub

2 个赞

这已经合并了 :partying_face:

3 个赞

此主题在 2 天后自动关闭。不再允许回复。