Hamburger-categories 小部件未挂载?

遵循此处的文档 Developing Discourse Themes & Theme Components
使用日志的示例工作正常,但当我将小部件更新为
{{mount-widget widget=\"hamburger-categories\"}}
时,什么也没有显示……我已按列表 https://github.com/discourse/discourse/tree/main/app/assets/javascripts/discourse/app/widgets. 检查过,有些小部件显示出来,有些则没有?

最终我希望在自定义标题中使用分类列表作为按钮,如下所示……

您是否已启用新的侧边栏?这将隐藏旧的汉堡菜单。

请确认您的网站设置如下:

1 个赞

我将其设置为“Header Dropdown”,然后更改为“Legacy”,但问题依旧。

1 个赞

汉堡菜单显示了,但我只需要类别
{{mount-widget widget="hamburger-menu"}}

抱歉,我被小部件的名称弄糊涂了。您正在使用哪个插件出口?

与文档中的相同

<script type="text/x-handlebars" data-template-name="/connectors/below-footer/fancy-footer">
  <div class="footer">
    <div class="wrap">
      <p>在挂载小部件之前</p>
        {{mount-widget widget="home-logo"}}
        {{mount-widget widget="hamburger-categories"}}
      <p>在挂载小部件之后</p>
    </div>
  </div>
  </script>

主题在此处 GitHub - tpximpact/bcn-discourse-theme 我已在 https://discourse.theme-creator.io/ 上试用过,问题仍然存在

如果您查看指南,您会发现插件插槽接受一个名为 showFooter 的属性。该属性很可能为 false。这意味着页脚和附加的小部件都不会显示。

无论如何,为什么页眉构件会有页脚插槽?

依我看,使用插件插槽主题组件来选择一个更好的位置。

它显示…它显示 widget=“home-logo”
它还显示 widget=“hamburger-menu”

但它不显示 widget=“hamburger-categories”

只是测试一下,现在在哪里并不重要

1 个赞

控制台中有什么错误吗?

检查器中显示了什么?

1 个赞

我可以看到这里有分类,所以它们确实存在。

我的猜测是问题出在这里:

页脚出口没有传递 categories 属性

但是,当我在页脚出口中使用 widget=“hamburger-menu” 时,它会显示类别
我尝试了页面周围的其他出口,但问题仍然存在

如果一开始就贴出那个错误信息,就能节省很多时间。

请始终查看控制台。

在以与汉堡菜单相同的方式检索到类别列表后,您可能需要将其与 JavaScript 关联起来。

1 个赞

是的,绝对是,如果文档没有说“现在,挂载一个小部件非常简单,您只需要知道小部件的名称。就是这样”,那么需要更多的时间。

1 个赞

我的猜测是该指南已过时?

您知道在哪里可以找到最新的指南吗?我在这里到处找答案,但找到的都是 4 年前的帖子。是否有实际的指南文档?

是的,我明白这可能会引起误解……技术上来说,它确实挂载了小部件,但这并不意味着小部件所需的数据会自动可用。

你可以尝试通过这种方式将类别传递给小部件:

{{mount-widget widget="hamburger-categories" args=(hash categories=this.site.categories)}}
1 个赞

太好了,谢谢……是的,这很有道理,现在显示出来了

既然我们在这里讨论控制台日志

在遵循文档 Developing Discourse Themes & Theme Components

当我尝试

<script type="text/discourse-plugin" version="0.8">
    console.log(Discourse)
</script>

我不确定我是否得到了一个“全局对象到控制台”,我得到的是一个类

如果我尝试类似以下的操作

<script type="text/discourse-plugin" version="0.8">
  const settings = Discourse.SiteSettings;
 console.log(settings)
</script>

我得到这个错误
THEME 6 'BCN Theme - watched locally'] Deprecation notice: use injected siteSettings instead of Discourse.SiteSettings

1 个赞