8

有什么办法,就像 WordPress 一样,创建 header.php、theme-file.php 和 footer.php,然后使用钩子将它们组合起来?对我来说仍然复​​制皮肤文件似乎很疯狂,尤其是当您需要对页眉或页脚的内容进行细微更改时。

非常感谢

4

1 回答 1

14

皮肤只是一个 ascx 控件,因此您可以像封装任何其他 WebForms 视图一样封装它的一部分。您可以将页眉/页脚内容放入他们自己的 ascx 文件中,然后将它们包含在皮肤中。唯一会遇到问题的地方是我认为 DNN 不支持在单独的控件中使用窗格。其他一切都应该是公平的游戏。

您需要将它们放在单独的目录中,以免 DNN 将它们视为其他皮肤。

-MySkin
--Controls
---Header.ascx
---Footer.ascx
--Home.ascx
--Home.doctype.xml
--Interior.ascx
--Interior.doctype.xml

然后,在皮肤中,通过在标题中注册控件来包含控件:

<%@ Register TagPrefix="myskin" TagName="Header" Src="Controls/Header.ascx" %>
<%@ Register TagPrefix="myskin" TagName="Footer" Src="Controls/Footer.ascx" %>

并通过控制语法包含它:

<myskin:Header runat="server" />
....
<myskin:Footer runat="server" />

该控件不会自动从皮肤访问任何上下文,因此如果您需要使用SkinPathPortalId类似的东西,您需要手动将其传递给控件。在控件中,定义一个属性来接收值(使用<script runat="server">节写代码【为此设置Language控件中的属性为C#】):

<script runat="server">
public string SkinPath { get; set; }
</script>

然后在皮肤中传递值:

<myskin:Header runat="server" SkinPath="<%# SkinPath %>" />
于 2012-05-09T15:11:58.100 回答