Могу ли я сделать Doctype на главной странице (Kentico 11 Portal Engine) динамически на основе макроса? - PullRequest
0 голосов
/ 05 ноября 2019

Я унаследовал сайт Kentico 11, который использует тип документа

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

Клиент хочет создать варианты AMP своих страниц, используя модуль AMP Kentico, который использует поддомен для любого содержимого AMP. Модуль также включает в себя логический макрос {% AmpFilter.IsAmpPage ()%}, который проверяет, обслуживаете ли вы в настоящее время содержимое AMP. https://github.com/Kentico/kentico-amp

Проблема, с которой я сталкиваюсь, заключается в том, что AMP, похоже, хочет иметь тип документа

<!doctype html>

. Я не хочу менять тип документа существующего сайта, но также не похоже, что я могу оценить макросы в поле типа документа шаблона главной страницы.

Интересно, сталкивался ли кто-нибудь с такой проблемой, какэто;если есть способ разрешить оценку макросов в поле типа документа или какой-то другой подход, о котором я не задумывался.

1 Ответ

1 голос
/ 06 ноября 2019

Подобная проблема возникает при добавлении атрибута lang HTML для поддержки рекомендаций WCAG 2.0. Однако атрибут HTML контролируется системным файлом PortalTemplate.aspx, который использует свойство XmlNamespace страницы Kentico. Чтобы решить эту проблему, мы добавили серверный код в свойства макета главной страницы. Однако это также может быть сделано в веб-части, которую вы добавляете на главную страницу. Затем, вместо изменения свойства страницы XmlNamespace, вы измените свойство страницы DocType в зависимости от выбранных вами условий. Будет ли это соответствовать вашим потребностям?

<script runat="server"> 
/// Add Page_Load just to insert the "lang" attribute required by WCAG 2.0 Level A guidelines
protected void Page_Load(object sender, EventArgs e)
{
    if (CurrentDocument != null)
    {          
        CMS.UIControls.ContentPage page= this.Page as CMS.UIControls.ContentPage;
        if (page != null)
        {
            System.Globalization.CultureInfo c= new System.Globalization.CultureInfo(CMS.Localization.LocalizationContext.CurrentCulture.CultureCode);
            string lang= c.TwoLetterISOLanguageName;
            page.XmlNamespace += " lang=\"" + lang + "\"";
            page.XmlNamespace += " xml:lang=\"" + lang + "\"";
        }
    }
}
</script>

Майк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...