我试图识别主页,然后是节点上的子页面。理想情况下,作为Body上的一个类,我可以根据用户所在的部分进行样式更改。
我有两个.master页面,Global和Site。正文标签位于Global中,而Site是儿童主标记。
由于这是一个英文/法文网站,我希望使用节点名称对我来说是最简单的方法。
答案 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标签。这是一个截图:
此处解释的替代方法:https://devnet.kentico.com/forums/f49/t43559/body-class涉及使用宏和代码组合设置body类,或通过自定义Web部件。基本上你可以使用CMS.CMSHelper.CMSContext.CurrentBodyClass修改它(这是在2014年写的所以语法会略有不同)
- 编辑: 添加其他一些答案,如果您想在模板或页面级别添加样式表,则可以这样做。要在模板的每个实例上添加样式表引用,请编辑模板头属性:
如果要在任何特定页面上包含样式表,可以通过编辑页面级别的“常规”选项卡来完成此操作,但这将删除您正在使用的主样式表(取决于您在页面中包含它的方式) ):
答案 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>