Есть ли способ переопределить функциональность Default.aspx из скина? - PullRequest
2 голосов
/ 06 октября 2011

Я новичок в DNN и с ужасом узнал, что заголовок HTML сайта перенесен в файл, который не может быть надежно изменен (Default.aspx), так как обновление DNN перезапишет любые изменения.

Мне нужно создать обложку, а для создания обложки мне нужно изменить тип документа, добавить дополнительные метатеги, элементы ссылок, файл JS и т. Д. - все это в голову. Я понимаю, что некоторые из этих изменений могут быть сделаны через администрацию, но так как они являются специфическими для кожи, кажется, что действительно неправильно обрабатывать это таким образом. Я не хочу изменять Default.aspx по уже упомянутой причине, и (если первое не является достаточно плохим), изменения там затрагивают весь сайт, а не только то, где применяется скин.

Какие у меня есть варианты, чтобы получить больше контроля над головой?

Ответы [ 2 ]

4 голосов
/ 06 октября 2011

Вы можете установить doctype скина, добавив в папку скина файл с именем [skinfile] .doctype.xml, т.е.если у вас есть скин Default.ascx, вы добавляете файл в ту же папку с именем Default.doctype.xml.В этом файле вы устанавливаете тип документа следующим образом:

<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, используя теги script и link, как в обычном html.Затем ссылки помещаются в основной раздел документа.Вы можете включить файлы css в голову, используя объект скина Styles .Обратите внимание, что DotNetNuke автоматически включает skin.css, который можно найти в каталоге скинов.

Я не пробовал добавлять другие метатеги в сам скин, но я делал это в модулях.Вот код, который я использовал для задания мета-описания и ключевых слов:

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);
}
3 голосов
/ 06 октября 2011

Вы можете использовать 40FINGERS StyleHelper Skin Object для добавления CSS, JS и метатегов в скин из головы.Я также слышал, что включение метатегов будет встроено в основной объект скина в DNN 6.1, и что история включения CSS и JS также будет обновлена.

В дополнение к автоматическому скину skin.cssвключены (, как @skajfes упомянул ), структура также включает в себя [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);
}

Для типа документа вы можете указать DNN, какой тип документа использовать для каждого элемента управления в вашей оболочке, добавив файл doctype.xml.См. Вики-страницу по настройке типов документов для подробностей , но в основном вы включаете файл с именем [skinname] .doctype.xml, который имеет один элемент XML, <SkinDocType>, и вы включаете свой тип документа внутритого, что.Простейший способ представления типа документа в XML - это обтекание в разделе CDATA, поэтому вам не нужно экранировать угловые скобки.

...