Чтобы получить идентификатор, вам также нужно пройти назад по предкам текущего предмета, пока не найдете предмет, у которого есть родительский предмет, который даст вам ваш магазин.
В идеале вам следуетделайте это в коде, а не в строке в 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).Если этого не произойдет, у вас останется без идентификатора, или вы можете изменить это String.Empty
, чтобы ввести идентификатор по умолчанию.
Обратите внимание, что это жестко кодирует имя шаблона Home непосредственно в ваш код, в идеале этобыло бы лучше перенести это в конфигурацию или вместо сопоставления с Parent.ID с идентификатором Sitecore вашего домашнего элемента, который вряд ли изменится.Однако я полагаю, что в любом случае вы редко будете переименовывать свой домашний элемент.