在ASPX布局中回显sitecore项目名称

时间:2011-09-06 11:03:08

标签: asp.net css layout sitecore

我已经得到了一个非常简单的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

非常感谢提前。

2 个答案:

答案 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项目。