【问题标题】:Is it possible to load a specific 2sxc module in a DNN skin?是否可以在 DNN 皮肤中加载特定的 2sxc 模块?
【发布时间】:2020-04-14 21:47:26
【问题描述】:

DNN 平台 9.3.2 / 2sxc 10.25.2

我有一个使用 2sxc 的 DNN 网站。我创建了一个“通知栏”内容类型和 c# razor 模板,用于向用户显示特殊通知。该模块旨在显示在网站的每个页面上。我使用“添加现有模块”功能手动将模块添加到每个页面,但这有点麻烦,并且我冒着内容编辑器意外移动模块、删除或忘记将其添加到新页面的风险。

是否有一个特殊的 2sxc 皮肤对象,我可以在我的 .ascx DNN 皮肤中使用它来加载 2sxc 模块,这样我就不必通过 DNN 将它添加到每个页面?显然在 DNN OpenContent 中有一个。

(不仅仅是通知栏,这对于偶尔更新的网站页眉或页脚非常有用。例如,社交媒体链接、地址或电话号码等联系信息,或其他不属于的链接的 DNN 页面菜单。)

【问题讨论】:

    标签: razor dotnetnuke 2sxc


    【解决方案1】:

    有两种方法

    1. 为这个特定模块创建一个窗格(这是最容易编辑和使用的)并在所有页面上显示该模块

    2. 在隐藏页面上创建模块,然后将其注入皮肤,使用工厂获取 CmsBlock - 请参阅 https://docs.2sxc.org/api/dot-net/ToSic.Sxc.Dnn.Factory.html#ToSic_Sxc_Dnn_Factory_CmsBlock_System_Int32_System_Int32_

    【讨论】:

    • 1.我希望避免“在所有页面上显示模块”,但我想这似乎仍然是一个可靠的解决方案。
    • 2.我会试试 CmsBlock。
    • 我研究了 Factory / CmsBlock 方法,但我无法弄清楚。我希望会有一个 DNN 皮肤对象。这是可能的还是完全在雷达上?我可以看到类似的东西非常有用 - 如果没有,我会将它添加到 GitHub 上的愿望清单中:)
    • 我会尽快写博客,因为它相当简单,但我知道如果没有文档,这不会让任何人弄清楚;)
    • ToSic.Sxc.Dnn.Factory.CmsBlock(tabId, moduleId).Render()
    【解决方案2】:

    Daniel,我们过去就是这样做的。我注意到您的电话类似但更简单(在 cmets 上方)。是因为 API 在 v10 之后的某个地方发生了变化吗?

    <script runat="server">
    // get 2sxc to Render() the output from the module on the SITE/Manage Flyout Links page
    private IHtmlString RenderFlyoutMenu()
      {
        return ToSic.SexyContent.Environment.Dnn7.Factory.SxcInstanceForModule(3354, 606).Render();
      }
    </script>
    <%=RenderFlyoutMenu() %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多