我已经得到了一个非常简单的Sitecore问题,但是我根本不熟悉ASP.NET,并且非常感谢能给予的任何帮助。下面是LayoutMain.aspx文件的片段,毫不奇怪,它是我运行的网站的大多数页面的主要布局文件。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LayoutMain.aspx.cs" Inherits="Company.Website.Layouts.LayoutMain" %>
<%@ Import Namespace="Company.Business"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<!-- LayoutMain -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title><sc:FieldRenderer FieldName="item" runat="server" /></title>
我想在<html>
标记中添加ID和几个类属性。这将通过整个网站的CSS提供精细的样式控制,而不必乱用.aspx文件!
我希望从Sitecore\Home
的第一个子级别获取ID属性,并且class属性包括当前项目名称和当前项目模板项目名称。这将导致类似这样的事情:
<html xmlns="http://www.w3.org/1999/xhtml" id="shop" class="big-boxes product">
当前项目在主CMS树中为Sitecore\Home\shop\boxes\big-boxes
且模板为product
非常感谢提前。
答案 0 :(得分:2)
我认为你可以用这一行来做到这一点:
<html xmlns="http://www.w3.org/1999/xhtml" id="shop" class='<%# Sitecore.Context.Item.Name + Sitecore.Context.Item.Template.Name %>'>
我希望有所帮助。
编辑:
请务必向Databind();
方法添加Page_Load
以获取数据绑定。
您可以使用相同的原则使id动态化。
答案 1 :(得分:0)
要获得身份证,您需要走回当前项目的祖先,直到找到一个拥有Home的父项目,这将为您提供Shop项目。
理想情况下,您应该在代码隐藏中执行此操作,而不是在ASPX中内联。你说你不熟悉ASP.NET,如果你遇到问题就添加评论,看看是否有人可以提供进一步的帮助。
在你的ASPX中:
<html xmlns="http://www.w3.org/1999/xhtml" id="Html" runat="server" >
然后在你的代码中,即在LayoutMain.aspx.cs文件中:
protected void Page_Load(object sender, EventArgs e)
{
Html.ID = GetHtmlID();
Html.Attributes["class"] = GetHtmlClass();
}
protected string GetHtmlID()
{
Sitecore.Data.Items.Item currentItem = Sitecore.Context.Item;
while ( currentItem.Parent != null && currentItem.Parent.Name != "Home" )
{
currentItem = currentItem.Parent;
}
return (currentItem.Parent.Name == "Home") ? currentItem.Name : String.Empty;
}
protected string GetHtmlClass()
{
return string.Format( "{0} {1}", Sitecore.Context.Item.Name, Sitecore.Context.Item.Template.Name );
}
此处的GetHtmlID方法将尝试查找将Home作为父级(例如Shop)的祖先。如果不能,那么您最终会没有ID,或者您可以将String.Empty
更改为默认ID。
请注意,这会将Home模板名称直接硬编码到您的代码中,理想情况下最好将其移出到配置中,或者使用您的Home Item的Sitecore ID与Parent.ID匹配,这不太可能改变。但是我想你无论如何都会重命名你的Home项目。