Six*_*mes 6 dotnetnuke header footer
有没有像WordPress一样的方法来创建header.php,theme-file.php和footer.php,然后使用钩子组合它们?我仍然复制皮肤文件似乎很疯狂,尤其是当您需要对页眉或页脚的内容进行微小更改时.
非常感谢
bdu*_*kes 12
皮肤只是一个ascx控件,因此您可以像封装任何其他WebForms视图一样封装它的一部分.您可以将页眉/页脚内容放入自己的ascx文件中,然后将它们包含在外观中.你唯一会遇到这个问题的地方是我不认为DNN支持在单独的控件中使用窗格; 其他一切都应该是公平的游戏.
您需要将它们放在一个单独的目录中,以便DNN不会将它们视为其他外观.
-MySkin
--Controls
---Header.ascx
---Footer.ascx
--Home.ascx
--Home.doctype.xml
--Interior.ascx
--Interior.doctype.xml
Run Code Online (Sandbox Code Playgroud)
然后,在皮肤中,通过在标题中注册它们来包含控件:
<%@ Register TagPrefix="myskin" TagName="Header" Src="Controls/Header.ascx" %>
<%@ Register TagPrefix="myskin" TagName="Footer" Src="Controls/Footer.ascx" %>
Run Code Online (Sandbox Code Playgroud)
并通过控制语法包含它:
<myskin:Header runat="server" />
....
<myskin:Footer runat="server" />
Run Code Online (Sandbox Code Playgroud)
控件不会自动访问皮肤的任何上下文,因此如果您需要使用SkinPath或PortalId类似的任何内容,您需要手动将其传递给控件.在控件中,定义一个属性来接收值(使用一<script runat="server">节来编写代码[将Language控件中的属性设置为C#]):
<script runat="server">
public string SkinPath { get; set; }
</script>
Run Code Online (Sandbox Code Playgroud)
然后传递皮肤中的值:
<myskin:Header runat="server" SkinPath="<%# SkinPath %>" />
Run Code Online (Sandbox Code Playgroud)