nathank
(Nathan Kershaw)
1
接续自
新日历功能:显示本地时间 的讨论:
我们的站点几乎完全限制在我们的国家/地区内。
我们有一个特殊问题,我们的时区看起来像我们国家/地区内的某个特定地点,因此当它与紧随其后的地点字段一起显示时,可能会使用户感到困惑:
在这种情况下,(本地)活动将在距离奥克兰市约 1000 公里(在另一个城市)的一个著名的本地场所举行。其中包含(奥克兰)信息具有很大的误导性。
在链接的帖子中对此进行了一些讨论:
能够在站点级别隐藏时区(尤其是在活动中)对于本地活动将非常有帮助,但看不到如何使用 CSS 来实现这一点——并且 ask.discourse.com 也帮不上忙。
与此相关的是,能够将本地活动设置为默认值也会非常有帮助。
1 个赞
ToddZ
2
如果我理解正确:
- 只有在事件设置中启用了“显示本地时间”时,才会显示事件时区城市
- “显示本地时间”默认禁用
所以,我推断您有用户启用了“显示本地时间”,而您不希望这样。
如果隐藏“显示本地时间”设置,使其无法启用,怎么样?
.event-field.show-local-time {
display: none;
}
然后,新事件将显示用户自己的本地时间和“芝加哥”。(我没有看到隐藏城市的方法,因为它是由内容生成的。)
例如,一个在菲尼克斯时间创建的事件将显示我自己的本地时间和“芝加哥”。
nathank
(Nathan Kershaw)
3
感谢您对此事的考虑和建议,Todd!
不完全是——这不是问题所在。时间是本地时间还是用户时间(在大多数情况下是相同的)实际上并不重要。
问题在于我们特定的时区包含的文本具有误导性(它是新西兰唯一的时区)。这对您也适用:在您上面的示例中,它暗示活动将在芝加哥的小溪(Little Creek)举行。
我正在尝试实现这个效果:
好吧,在对着“vibe coding”的墙撞了几次头之后,我在本地主题组件的 JS 标签中加入了这段 JavaScript 代码,它为我解决了问题:
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer("swap-auckland-for-nz", (api) => {
function swapTimezones(root = document) {
root.querySelectorAll('.relative-time').forEach(elem => {
if (elem.textContent && elem.textContent.includes('(Auckland)')) {
elem.textContent = elem.textContent.replace('(Auckland)', '(NZ)');
}
});
}
api.onPageChange(() => {
swapTimezones(document);
// 设置持久的突变观察器以实现动态事件/日历输出
const observer = new MutationObserver(() => {
swapTimezones(document);
});
observer.observe(document.body, { childList: true, subtree: true });
// 可选地,在其他导航事件后也再次运行
window.addEventListener("hashchange", () => swapTimezones(document));
window.addEventListener("popstate", () => swapTimezones(document));
});
});
如果我有时间,我会将其打包成一个可安装的主题组件,以便其他人可以根据需要使用它。
ToddZ
4
我没意识到新西兰只有一个时区,但等我办完事回来时,我觉得你的问题需要用到 JavaScript。很高兴你找到了一个 JS 解决方案!
1 个赞