面包屑链接

非常感谢 @manuel – 我已使用您的代码更新了此组件(并添加了一些代码片段),以启用一些其他功能:

  1. 嵌套类别现在可在面包屑中支持
  2. 除主题页面外,完整的面包屑现在将显示在所有类别和嵌套类别列表页面上
  3. 现在有一个设置可以在移动设备上启用或禁用此功能
2 个赞

你好!这个组件很棒!

只有一个小细节,也许你知道如何修复。

返回按钮在向下滚动时会消失(请看附带的视频)……是否可以将返回按钮固定/浮动在屏幕顶部,以便在滚动时保持可见?

背景:该社区被嵌入(webview)到我们的移动应用程序中。

2 个赞

感谢 @cristo 提出的绝佳建议,该建议现已包含在设置中:

3 个赞

谢谢 @denvergeeks!按钮现在是固定的。

但是,正如您在附加视频中看到的,该按钮没有将我带回到主屏幕的滚动位置。

1 个赞

是的,因为这是一个“主页”按钮,而不是“返回”按钮!

1 个赞

抱歉!因为有那个箭头,我还以为是返回按钮。

@denvergeeks 感谢您的澄清!您是否知道有哪个组件提供返回按钮?

1 个赞

我不知道是否有任何现有的 TC 包含(或包含)一个真正的“返回”按钮。可能确实存在包含该按钮的内容。

但我认识到在网站导航中添加“返回”按钮的实用性,因此我将另外创建一个提供该功能的 TC。

也许您可以查找是否有什么现有的主题或主题组件碰巧包含该按钮。找到它可能会加快我的进程。

2 个赞

太棒了!我会研究一下然后告诉你我的发现。

谢谢!

2 个赞

@denvergeeks 我找到了一个可能对您有用的主题:

我还没有找到任何包含后退按钮的现有主题或组件。

2 个赞

不幸的是,我在 iPhone 16 Pro Max 上遇到了同样的问题。

2 个赞

是的,我可以确认它是在更新后出现的。我的安卓手机也出现了这个问题。

2 个赞

感谢 @Aaron_Walsh@cristo 的报告!请立即更新并告知您的结果!

4 个赞

我确认了 Android 端的问题。现已修复并移除。

2 个赞

已在我的 iPhone 上修复!

2 个赞

@denvergeeks 太棒了!返回按钮在 Android 上可以正常工作了。

非常感谢!

2 个赞

我注意到没有办法决定面包屑导航的位置,这会很方便。例如,我正在使用类别横幅,我希望面包屑导航位于其上方。

它在下面会有点迷失。

有没有可能改变这一点?
谢谢


我刚注意到一些可以修复(或至少可以选择打开和关闭)的东西。我认为最后的“/”不需要在那里。

image

所以它将是“Home / General Discussion”,而不是“Home / General Discussion /”。

编辑:
我刚用 CSS 做了这个,但我认为它可以是默认的。如果有人想要:

/* 从最后一个面包屑导航项中删除分隔符(::after 内容) */
.breadcrumbs li:last-child::after {
    content: none;
}

这是一个小的调整,但对我来说看起来更好。将底部外边距增加到 1rem,让它有更多“呼吸”空间,但当有横幅时(如果我们必须坚持在页面上的那个位置),它也会使其居中。看看我之前的图片(默认的 0.5rem)与使用 1rem 的对比:

image


所有 CSS 调整后的最终结果:

image

CSS:

/* 面包屑导航 - 删除背景并增加底部外边距 */
.breadcrumbs {
    background-color: transparent !important;
    margin-bottom: 1rem;
}

/* 面包屑导航 - 隐藏“Home”链接的返回箭头 */
.breadcrumbs__title .d-icon {
    display: none;
}

/* 面包屑导航 - 从最后一个面包屑导航项中删除分隔符(::after 内容) */
.breadcrumbs li:last-child::after {
    content: none;
}

您好,我的论坛收到了一个警告,因为 Discourse 核心即将发生更改:

[管理员通知] 您的某个主题或插件需要更新,以支持 Discourse 核心即将发生的变化。(ID:discourse.script-tag-discourse-plugin)已识别问题:“面包屑链接”。

我正在使用 Discourse cloud,是我自己可以解决这个问题,还是必须等待插件更新?

@manuel 在 GitHub 上我注意到您是此组件的贡献者之一,所以希望在这里提及您没问题吧?

我相信更多人也看到了相同的消息:

[Admin Notice] 主题 'Breadcrumb Links' 包含需要更新的代码。(id:discourse.script-tag-discourse-plugin) (了解更多)

而“了解更多”链接指向:

这个组件有更新的可能性吗?
谢谢!

1 个赞

我刚刚提交了一个修复此问题的 PR,希望贡献者能审核并合并它。

2 个赞

谢谢分享!现在它在没有警告信息的情况下正常工作了。

我遇到了另一个问题,我在下面提到了:

关于这个问题,我问了 ChatGPT,它(因为我不是开发者)回答说:

显示 ChatGPT 的消息

这个问题很可能源于你从 URL 中提取 topicId 的方式:

const topicId = url.split('/')[2];

如果你的 URL 包含更复杂的模式(例如带有空格、特殊字符或非标准 slug 的标题),这种简单的分割方法将无法可靠地获取正确的 topic ID。


为什么这会导致问题:

  • /t/3ple-2015-2019-title/12345 这样的 URL,数字 topic ID 位于末尾,但你的代码假设 topic ID 始终是第三个部分。
  • 如果你的 URL 结构不同,有时你会获取到 slug 或标题的一部分,而不是 ID。
  • 这会破坏你的 AJAX 请求 (/t/${topicId}.json),因为你可能会发送一个无效的 topic ID 或 slug,导致返回不正确或默认的类别信息(例如“General”)。

如何修复:

使用更可靠的方法从 URL 中提取 topic ID:

  1. 从 URL 的最后一个数字部分提取 topic ID。

Discourse 的 topic URL 通常看起来像 /t/{slug}/{id},例如:

/t/3ple-2015-2019-title/12345

这里的 12345 是 topic ID。


替换这个:

const topicId = url.split('/')[2];

用这个:

const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1]; // 最后一个部分,预计是数字 ID

为了更安全,请验证 topicId 是一个数字:

if (!/^\\d+$/.test(topicId)) {
  console.error("从 URL 中提取的 topic ID 无效:", topicId);
  return; // 停止执行
}

总结:在 updateBreadcrumbs 中将你的代码片段更新为如下:

if (url.includes('/t/')) {
  const segments = url.split('/').filter(Boolean);
  const topicId = segments[segments.length - 1];

  if (!/^\\d+$/.test(topicId)) {
    console.error("从 URL 中提取的 topic ID 无效:", topicId);
    return;
  }

  // 然后继续使用 topicId 进行 AJAX 调用
}

这样,无论 URL 中的标题是否复杂或包含空格,你都能始终获取到数字 topic ID,从而修复面包屑类别和路径查找问题。

您能帮忙修复这个问题吗?
提前感谢!:raising_hands: