# 用户卡片目录

**URL:** https://meta.discourse.org/t/user-card-directory/144479
**Category:** Theme component
**Tags:** official, user-card-directory
**Created:** [2020年三月16日 14:21 UTC](https://meta.discourse.org/t/user-card-directory/144479 "2020-03-16T14:21:04Z")
**Posts on this page:** 20
**Page:** 3

<div class="post-metadata">

### Author: ![aksoforever](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aksoforever/32/502615_2.png) [@aksoforever](https://meta.discourse.org/u/aksoforever)
#### Post date: [2020年九月29日 09:08 UTC](https://meta.discourse.org/t/user-card-directory/144479/44 "2020-09-29T09:08:30Z")

</div>

亲爱的 David，我发现了一个问题：

当我选择一个群组并滚动鼠标加载更多时，所有用户会被直接加载，而不是仅加载所选群组的成员。

你能帮忙看一下吗？

---

<div class="post-metadata">

### Author: ![md-misko](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/md-misko/32/126315_2.png) [@md-misko](https://meta.discourse.org/u/md-misko)
#### Post date: [2020年九月30日 18:33 UTC](https://meta.discourse.org/t/user-card-directory/144479/46 "2020-09-30T18:33:45Z")

</div>

感谢又一个出色的组件 😍

新版的深色模式设置有一个小问题：

深色主题：

 ![image](https://global.discourse-cdn.com/meta/original/3X/4/0/407e3ea0349d2d7c729238e9aff6a8b164338168.png)

浅色主题（启用自动深色模式配色方案）：

 ![image](https://global.discourse-cdn.com/meta/original/3X/d/f/df68ffe68c890dd7314657367874675c835359c9.png)

另外有个请求：能否为该组件添加两个设置项，分别用于：

- 选择默认时间范围
- 选择默认的排序类型和排序顺序

我希望通过设置默认时间范围为“年”，并按“阅读”降序排列，让过去一年内最活跃的读者显示在顶部。

这个功能容易实现吗？

---

<div class="post-metadata">

### Author: ![alxpck](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alxpck/32/243713_2.png) [@alxpck](https://meta.discourse.org/u/alxpck)
#### Post date: [2020年十一月12日 19:15 UTC](https://meta.discourse.org/t/user-card-directory/144479/47 "2020-11-12T19:15:25Z")

</div>

嗨 @david，这个主题组件继续为我们的 Discourse 增添价值，但最近一个已知的 bug/特性导致我们感到相当困惑和困扰。

**已知 bug/特性：** 即使登录用户不符合过滤条件，他们仍会始终出现在结果中。

在以下情况中，我的用户并不属于 ruby 群组，但我却显示在结果中。

**在主题修改方面有哪些可行方案，使得查看目录的用户不会在不符合其所属条件的结果中看到自己？**

[![](https://global.discourse-cdn.com/meta/original/3X/b/7/b7c199748635953c533e088d23199d7d5884f6ac.jpeg) ](https://dl.dropboxusercontent.com/s/8fhpf8y7odtp107/Screen%20Shot%202020-11-12%20at%202.07.42%20PM.png?dl=0)

非常感谢你深入探讨我们该如何帮助改变这一行为。我们使用的是基于 Discourse 的托管服务。

---

<div class="post-metadata">

### Author: ![omarfilip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/omarfilip/32/208019_2.png) [@omarfilip](https://meta.discourse.org/u/omarfilip)
#### Post date: [2020年十一月12日 19:48 UTC](https://meta.discourse.org/t/user-card-directory/144479/48 "2020-11-12T19:48:04Z")

</div>

@alxpck 抓得好，我在 2.6.0.beta5 上也能复现。

---

<div class="post-metadata">

### Author: ![alxpck](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alxpck/32/243713_2.png) [@alxpck](https://meta.discourse.org/u/alxpck)
#### Post date: [2020年十一月20日 20:32 UTC](https://meta.discourse.org/t/user-card-directory/144479/49 "2020-11-20T20:32:54Z")

</div>

@david 或 @tobiaseigen，对此有什么想法？这里有哪些可行的方案？

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2020年十一月20日 21:18 UTC](https://meta.discourse.org/t/user-card-directory/144479/50 "2020-11-20T21:18:21Z")

</div>

嗨 @alxpck，抱歉回复晚了！

这实际上源于核心“用户目录”的行为——你可以在 Meta 上打开 [/u](https://meta.discourse.org/u)，尝试按用户名筛选就能看到。无论应用什么筛选条件，当前用户总会出现在列表中。例如：

 ![Screenshot 2020-11-20 at 21.15.44](https://global.discourse-cdn.com/meta/original/3X/1/b/1b74ea60dab855bbbbf387ff7e8ffa2433ffe699.png)

不过你说得对，当按群组筛选时，这确实会变得非常令人困惑。如果某人故意这样筛选，他们可能并不想看到自己（除非他们符合筛选条件）。

我已在核心仓库中为此发起一个 PR 供讨论：[UX: Do not include current user in group-filtered directory results by davidtaylorhq · Pull Request #11310 · discourse/discourse · GitHub](https://github.com/discourse/discourse/pull/11310)

我们看看进展如何——如果最终决定不在核心中做出该更改，我们可以为这个主题组件寻找一个变通方案。

---

<div class="post-metadata">

### Author: ![alxpck](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alxpck/32/243713_2.png) [@alxpck](https://meta.discourse.org/u/alxpck)
#### Post date: [2020年十一月20日 21:40 UTC](https://meta.discourse.org/t/user-card-directory/144479/51 "2020-11-20T21:40:01Z")

</div>

非常感谢你，@david。真的很感激你从 Discourse 核心和用户卡片目录主题两个角度来审视这个问题。

无论你从哪个角度入手，我们都知道做出这一改变对我们的社区将具有巨大的价值。

别担心延迟——2020 年嘛，对吧？

---

<div class="post-metadata">

### Author: ![omarfilip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/omarfilip/32/208019_2.png) [@omarfilip](https://meta.discourse.org/u/omarfilip)
#### Post date: [2020年十一月20日 22:14 UTC](https://meta.discourse.org/t/user-card-directory/144479/52 "2020-11-20T22:14:08Z")

</div>

> [@david](#):
>
> 按群组筛选时会变得非常令人困惑。

是的，尤其是当它是由 [订阅插件](https://meta.discourse.org/t/discourse-subscriptions/140818?u=omarfilip) 使用的订阅者群组时。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年十一月22日 23:25 UTC](https://meta.discourse.org/t/user-card-directory/144479/53 "2020-11-22T23:25:13Z")

</div>

我已合并 @david 的更改……您的网站将在未来一周左右收到更新。

目前唯一待定的事项是：当我访问目录且未应用任何筛选时，“始终显示我”功能的保真度该如何处理。

您是否仍希望实现“当我访问 `/u` 页面时（即使未使用筛选器）也不要将我排在首位”这一功能？我们可以在组件中通过某种方式绕过该问题。

---

<div class="post-metadata">

### Author: ![alxpck](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alxpck/32/243713_2.png) [@alxpck](https://meta.discourse.org/u/alxpck)
#### Post date: [2020年十一月23日 19:05 UTC](https://meta.discourse.org/t/user-card-directory/144479/54 "2020-11-23T19:05:00Z")

</div>

太棒了！感谢 @sam、@david 和整个团队！

关于“始终向我显示”：

- 我理解在默认的 `/u` 页面布局（一种以数据驱动的排行榜）中，始终将用户自己的个人资料醒目地展示出来是有道理的。这样他们可以轻松地将自己与 Discourse 上的其他人进行比较。
- 但在我们的使用场景中，用户卡片目录的页面目的并非比较，而是发现。用户不需要去发现自己的个人资料，因此将其中一个顶部位置始终留给他们的个人信息既无帮助，也不是对版面空间的最佳利用。如果他们确实想找到自己的个人资料，我们已经引导他们访问 `/my/summary` 或点击自己的头像。

我无法代表其他 Discourse 实例的所有其他用例发言，但就我们的需求而言，我们确实更希望能够避免显示用户自己的个人资料（无论是否使用筛选器）。

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [2020年十一月23日 20:15 UTC](https://meta.discourse.org/t/user-card-directory/144479/55 "2020-11-23T20:15:05Z")

</div>

我无法代表他人发言，也很少听到关于用户目录的抱怨，但就我个人而言，我也不将其用作排行榜，主要用它来发现内容。

或许可以提供一个开关来隐藏它？

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年十一月23日 20:48 UTC](https://meta.discourse.org/t/user-card-directory/144479/56 "2020-11-23T20:48:05Z")

</div>

> [@tobiaseigen](#):
>
> 也许可以提供一个开关来让它消失？

有可能，我们需要@codinghorror 来确认一下，他是希望将其作为核心站点设置，还是作为一个主题组件的问题。这个问题在过去几年中已经出现过 2-3 次了。

至少，我们可以调整核心代码，使得主题组件能够对此进行修改。

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [2020年十一月24日 06:07 UTC](https://meta.discourse.org/t/user-card-directory/144479/57 "2020-11-24T06:07:39Z")

</div>

我不太确定，“卡片网格”功能似乎比较特定于某个站点。我认为将其作为站点设置是可以的？我对此没有强烈的看法，但我不认为将其设为默认值是合理的。

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2020年十一月24日 15:19 UTC](https://meta.discourse.org/t/user-card-directory/144479/58 "2020-11-24T15:19:09Z")

</div>

这是一个为主题组件添加“隐藏当前用户”设置的 PR。如果启用，它将始终隐藏当前用户。

> <https://github.com/discourse/discourse-user-card-directory/pull/1>

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年十一月24日 22:40 UTC](https://meta.discourse.org/t/user-card-directory/144479/59 "2020-11-24T22:40:29Z")

</div>

> [@david](#):
>
> 始终将当前用户隐藏

它是否处理了你实际上想查看当前用户的情况？例如，你搜索了自己……你位于排行榜顶部……等等？

对于 @alxpck 来说，目前的版本可能已经足够，但这只是随口一说。

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2020年十一月25日 00:32 UTC](https://meta.discourse.org/t/user-card-directory/144479/60 "2020-11-25T00:32:04Z")

</div>

它会无条件隐藏当前用户，且这是一个默认禁用的主题设置。我认为对于用户卡片布局来说这是可以接受的？但肯定不适用于排行榜。

---

<div class="post-metadata">

### Author: ![alxpck](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alxpck/32/243713_2.png) [@alxpck](https://meta.discourse.org/u/alxpck)
#### Post date: [2020年十一月25日 18:08 UTC](https://meta.discourse.org/t/user-card-directory/144479/61 "2020-11-25T18:08:27Z")

</div>

谢谢！

这是一个非常棒的改进。

我们更倾向于 @sam 提到的细粒度（即您确实需要查看当前用户的情况），但从不符合筛选条件的搜索结果中移除相关用户正是促使我们提出此问题的原因——因此，我非常感激通过主题设置来隐藏当前用户的功能。

---

<div class="post-metadata">

### Author: ![craigconstantine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/craigconstantine/32/511195_2.png) [@craigconstantine](https://meta.discourse.org/u/craigconstantine)
#### Post date: [2020年十一月27日 16:51 UTC](https://meta.discourse.org/t/user-card-directory/144479/62 "2020-11-27T16:51:58Z")

</div>

我看到至少有几张用户卡片重复出现了……例如“andy1”和“blane”等，出现在这个页面上：

[https://forum.moversmindset.com/u](https://forum.moversmindset.com/u)

更新：有些奇怪的情况。我在 Chrome 的 Cognito 模式下看到了这个问题，但在使用 Safari 登录时却没有看到重复项。这可能会很难排查……

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2020年十一月27日 17:51 UTC](https://meta.discourse.org/t/user-card-directory/144479/63 "2020-11-27T17:51:15Z")

</div>

嗨，Craig，感谢你的报告。看起来这是 Discourse 核心本身的问题——即使禁用了用户卡片组件，问题依然存在。

问题的根源在于你所有的用户目前各项指标的值都为“0”，而我们的排序逻辑存在不一致。我已经提交了一个拉取请求（PR）来修复此问题，待合并后将部署到你的站点。如果你感兴趣，可以在 PR 中查看技术细节：

> <https://github.com/discourse/discourse/pull/11370>
>
> User directory items are sorted by some activity metric. If those metrics have t…he same value, postgres does not guarantee the order in which they will be returned. This can cause issues in pagination - some users may appear twice, and some may be missed. To illustrate
> 
> \`\`\`
> pry(main)\> query = DirectoryItem.where(period\_type: DirectoryItem.period\_types\[:weekly\]).order(:likes\_received).limit(50);
> pry(main)\> page1 = query.offset(0).pluck(:id);
> pry(main)\> page2 = query.offset(50).pluck(:id);
> pry(main)\> (page1 & page2).count # users on both pages
> =\> 29
> \`\`\`
> 
> If we use the primary key to tie-break matching metrics, things are much more reliable
> 
> \`\`\`
> pry(main)\> query = DirectoryItem.where(period\_type: DirectoryItem.period\_types\[:weekly\]).order(:likes\_received, :id).limit(50);
> pry(main)\> page1 = query.offset(0).pluck(:id);
> pry(main)\> page2 = query.offset(50).pluck(:id);
> pry(main)\> (page1 & page2).count # users on both pages
> =\> 0
> \`\`\`
> 
> This most commonly effects new sites where all the directory metrics are zero.
> 
> The fact that the ordering is indeterminate makes it difficult to write a reliable test case for this.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2020年十一月27日 19:17 UTC](https://meta.discourse.org/t/user-card-directory/144479/64 "2020-11-27T19:17:51Z")

</div>

> [@david](#):
>
> 我们的排序不一致。我已提交一个 PR 来修复该问题，合并后将部署到您的站点。

问题已修复，我已将核心更改部署到您的站点 @craigconstantine。如果您仍遇到任何问题，请告诉我们。

> [@md-misko](#):
>
> 新的深色模式设置存在一个小故障：

已修复，抱歉让您久等！请在您的管理后台更新主题组件，浅色/深色主题下的显示效果应该就没问题了。

[上一頁](https://meta.discourse.org/t/user-card-directory/144479.md?page=2)

[下一頁](https://meta.discourse.org/t/user-card-directory/144479.md?page=4)
