Повторение имени элемента sitecore в макете ASPX - PullRequest
1 голос
/ 06 сентября 2011

Я уверен, что это очень простой вопрос 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>.Это даст мне возможность точного управления стилями с помощью CSS всего сайта без необходимости возиться с файлами .aspx!

Я бы хотел, чтобы атрибут ID был взят с первого дочернего уровня с Sitecore\Home иАтрибут класса для включения как текущего имени элемента, так и текущего имени элемента шаблона элемента.Это приведет к чему-то вроде этого:

<html xmlns="http://www.w3.org/1999/xhtml" id="shop" class="big-boxes product">

Где текущий элемент Sitecore\Home\shop\boxes\big-boxes в основном дереве CMS и имеет шаблон product

Большое спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Я думаю, вы могли бы просто сделать это с помощью этой строки:

<html xmlns="http://www.w3.org/1999/xhtml" id="shop" class='<%# Sitecore.Context.Item.Name + Sitecore.Context.Item.Template.Name %>'>

Надеюсь, это поможет.

edit:

Не забудьте добавить Databind(); кPage_Load метод для получения привязки данных.

Вы можете использовать тот же принцип, чтобы сделать идентификатор динамическим.

0 голосов
/ 07 сентября 2011

Чтобы получить идентификатор, вам также нужно пройти назад по предкам текущего предмета, пока не найдете предмет, у которого есть родительский предмет, который даст вам ваш магазин.

В идеале вам следуетделайте это в коде, а не в строке в 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 вашего домашнего элемента, который вряд ли изменится.Однако я полагаю, что в любом случае вы редко будете переименовывать свой домашний элемент.

...