Kentico NodeName作为一个体类?

时间:2016-01-25 16:59:42

标签: asp.net kentico

我试图识别主页,然后是节点上的子页面。理想情况下,作为Body上的一个类,我可以根据用户所在的部分进行样式更改。

我有两个.master页面,Global和Site。正文标签位于Global中,而Site是儿童主标记。

由于这是一个英文/法文网站,我希望使用节点名称对我来说是最简单的方法。

6 个答案:

答案 0 :(得分:2)

如果您的主页和内部页面具有不同的页面类型,那么您可以从下面的宏中受益。我们使用类似的东西在body标签上提供Page类型特定的id,通常很有用

<body class="{% CurrentDocument.NodeClass.ClassName.ToString() #%}">

但是,可以根据您的需要进行调整。

答案 1 :(得分:2)

我建议您实现一个通用样式表,在所有页面中共享,以及几个特定于部分的样式表。

答案 2 :(得分:0)

我并不是100%清楚你所描述的内容,但你可以直接使用NodeLevel作为/是NodeLevel = 0,其他一切都是Level 1 +

答案 3 :(得分:0)

如果您愿意向body标签添加数据属性或id属性,最简单的方法是在body标签的主页中添加类似这样的内容:

id="{%nodealias%}"

由于节点别名通常是唯一的,除非您有多个页面,在不同的路径上,具有相同的名称,ID应该可以正常工作。我更喜欢使用“nodealias”而不是友好名称,因为它确保不会有任何特殊字符,并用短划线“ - ”替换空格等。上面的宏将节点别名作为id属性添加到body标签。这是一个截图:

Body tag with node alias macro

此处解释的替代方法:https://devnet.kentico.com/forums/f49/t43559/body-class涉及使用宏和代码组合设置body类,或通过自定义Web部件。基本上你可以使用CMS.CMSHelper.CMSContext.CurrentBodyClass修改它(这是在2014年写的所以语法会略有不同)

- 编辑: 添加其他一些答案,如果您想在模板或页面级别添加样式表,则可以这样做。要在模板的每个实例上添加样式表引用,请编辑模板头属性:

Editing template header

如果要在任何特定页面上包含样式表,可以通过编辑页面级别的“常规”选项卡来完成此操作,但这将删除您正在使用的主样式表(取决于您在页面中包含它的方式) ):

Editing page level stylesheet

答案 4 :(得分:0)

这是我在全球.Master的.cs中出现的内容。到目前为止,它似乎给了我足够的工作。从这里我可以使用js和css来定位我需要的东西。

string aliasPath = CMS.DocumentEngine.DocumentContext.OriginalAliasPath.ToLower().TrimStart('/');

if (aliasPath == "")
{
    this.BodyClass += " home";
}
else
{
    this.BodyClass += " " + aliasPath.Replace("/","_");
}

答案 5 :(得分:0)

在“母版”页面的正文部分中,您可以以

开头
<script runat="server">
 protected void Page_Load(object sender, EventArgs e)
 {
   if(CurrentDocument.DocumentName== "Site")   
     CMS.DocumentEngine.DocumentContext.CurrentBodyClass += "body-site";
   else
     CMS.DocumentEngine.DocumentContext.CurrentBodyClass += "body-global";
 }
</script>