有没有办法从皮肤中覆盖Default.aspx的功能?

时间:2011-10-05 21:49:32

标签: dotnetnuke

我是DNN的新手,并且惊恐地发现网站的HTML主管被降级为无法真正可靠修改的文件(Default.aspx),因为升级DNN会覆盖任何修改。

我需要创建一个皮肤,为了创建皮肤,我需要更改doctype,添加其他元标记,链接元素,JS文件等等。我知道其中一些变化可以通过管理来实现,但由于它们是特定于皮肤的,因此以这种方式处理它似乎是错误的。我不想因为已经提到的原因修改Default.aspx,并且(如果第一个不够糟糕)更改会影响整个网站,而不仅仅是皮肤的应用位置。

我有什么选择可以更好地控制头部?

2 个答案:

答案 0 :(得分:4)

您可以通过使用名称[skinfile] .doctype.xml将文件添加到skin文件夹来设置皮肤的doctype,即。如果您有一个皮肤Default.ascx,则在名为Default.doctype.xml的同一文件夹中添加一个文件。在该文件中,您可以设置doctype:

<SkinDocType><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">]]></SkinDocType>

您可以使用脚本和链接标记链接到javascript和css文件,就像在常规html中一样。然后将链接放在文档的正文部分中。您可以使用Styles外观对象在头部包含css文件。请注意,DotNetNuke自动包含skin.css,可以在skin目录中找到。

我没有尝试在皮肤本身添加其他元标记,但我已经在模块中完成了。这是我用来设置元描述和关键字的代码:

public void Page_Load (object sender, EventArgs e) {
    DotNetNuke.Framework.CDefault BasePage = Page as DotNetNuke.Framework.CDefault;

    BasePage.KeyWords += "...";
    BasePage.Description = "...";

    base.Page_Load(sender, e);
}

答案 1 :(得分:3)

您可以使用40FINGERS StyleHelper Skin Object将CSS,JS和meta标记从皮肤添加到头部。我还听说元标记包含将被构建到DNN 6.1中的核心皮肤对象中,并且CSS和JS包含故事也将被更新。

除了自动包含skin.css(as @skajfes mentioned)之外,框架还包括[skinname] .css(如果存在)。

当所有其他方法都失败时,您可以通过代码向头部添加控件(添加<script runat="server">标记以在您的皮肤中编写代码):

private void Page_Load (object sender, EventArgs e)
{
    var link = new HtmlLink();
    link.Href = SkinPath + "example.css";
    link.Attributes["rel"] = "Stylesheet";
    this.Page.Header.Controls.Add(link);
}

对于doctype,您可以通过添加doctype.xml文件告诉DNN您的皮肤中的每个控件使用哪种doctype。请参阅wiki page on setting doctypes for details,但基本原则是您包含名为[skinname] .doctype.xml的文件,该文件包含一个XML元素<SkinDocType>,并且您在其中包含了您的doctype。在XML中表示doctype的最简单方法是将其包装在CDATA部分中,这样您就不必转义尖括号。