我可以根据宏使母版页(Kentico 11 门户引擎)上的 Doctype 动态化吗?

Can I make the Doctype on a master page (Kentico 11 Portal Engine) dynamic based on a macro?

我继承了一个使用

文档类型的 Kentico 11 站点
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

客户想要使用 Kentico 的 AMP 模块创建其网页的 AMP 变体,该模块对任何 AMP 内容使用子域。 该模块还包含一个布尔宏 {% AmpFilter.IsAmpPage() %},用于测试您当前是否在提供 AMP 内容。 https://github.com/Kentico/kentico-amp

我 运行 遇到的问题是 AMP 似乎需要

的文档类型
<!doctype html>

。我不想更改现有网站的文档类型,但看起来我也无法评估母版页模板的文档类型字段中的宏。

想知道是否有人遇到过这样的问题;如果有一种方法允许在文档类型字段中评估宏,或者我没有想到的其他方法。

添加 HTML lang 属性以支持 WCAG 2.0 准则时,存在类似的问题。但是,HTML 属性由系统文件 PortalTemplate.aspx 控制,该文件使用 Kentico 页面的 XmlNamespace 属性。为了解决这个问题,我们在母版页的布局属性中添加了服务器端代码。但是,这也可以在您添加到母版页的 Web 部件中完成。然后,根据您选择的任何条件,而不是更改页面的 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>

麦克