“新主题”按钮功能异常

当我点击“新建主题”按钮时,它不会立即显示新主题表单。相反,在我选择论坛中的一个主题后,表单才会显示。它仍然显示正在创建新主题,但是在后台。一旦你打开任何现有主题,你试图创建的新主题就会出现(完全正确;即,对于你打算发帖的论坛,即使你输入的主题在不同的论坛中)。

这只发生在一个网站上(https://discussions.scouting.org/),所以我认为这是他们配置不当的地方。我已经向他们提出了这个问题([那里](https://discussions.scouting.org/t/new-topic-button-not-working-correctly/308140)),但徒劳无功。

这是否在安全模式下发生?

1 个赞

在安全模式下无法重现此问题。是自定义主题/CSS 导致了此问题。

4 个赞

管理员添加了一个 CSS 自定义,如下所示:

body:not([class*="category-council-"]):not(.staff).closed-topic .reply, 
body:not([class*="category-council-"]):not(.staff).closed-topic #topic-footer-buttons .create, 
body:not([class*="category-council-"]):not(.staff).closed-topic .timeline-container .create, 
body:not([class*="category-council-"]):not(.staff).closed-topic #reply-control {
  display: none !important;
}

乍一看似乎还可以,但然后我看到 body.closed-topic 被应用于主题列表……这真的没有意义。

这个类默认不在 Discourse 中,所以需要追踪另一个添加它的自定义……

<script type="text/discourse-plugin" version="0.8">
const container = Discourse.__container__;
const controller = container.lookup("controller:topic");
const currentUser = api.getCurrentUser();

api.onPageChange(() => {

  if (!currentUser || currentUser.admin || currentUser.moderator || currentUser.trust_level != 4 ) {
    return;
  } else {
    let model = controller.get("model");
    
    document.querySelector("body").classList.add("closed-topic");
    
    if (model) {
      if (!model.closed) {
        document.querySelector("body").classList.remove("closed-topic");
      }
    }
  }

});
</script>

所以在这里,如果你已登录,不是管理员,不是版主,并且是信任等级 4……那么它会将 closed-topic 类添加到页面主体。

这个类只有在 model.closed 为 false 时才会被移除,这意味着……如果它不是一个已关闭的主题(甚至根本不是一个主题),closed-topic 类将被应用。

这行:

document.querySelector("body").classList.add("closed-topic");

可能应该放在 if (model) 里面,因为否则即使没有模型存在时(例如,当您不在主题内时)它也会被应用……

似乎意图是阻止信任等级 4 的用户回复已关闭的主题,但它的应用范围太广了。

5 个赞

非常感谢,这正是我想要的。

呵呵,我不知道我是否是那个变更的原因。我发现了那个bug并肆意利用了它。我从来不理解为什么在你可以为旧帖子添加额外信息时,却要求人们开启一个新帖子。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.