如何确定Sitecore渲染字段是否继承标准值?

时间:2014-07-18 23:46:58

标签: c# asp.net inheritance sitecore

如果我的Sitecore渲染字段是否继承标准值,我如何以编程方式确定?

我可以用这个...来获取渲染字段的标准值。

var ss = StandardValuesManager.GetStandardValue(rootrenderingfield);

我也可以解析渲染的id,但是真的需要知道继承,所以我可以执行渲染引用删除......

3 个答案:

答案 0 :(得分:2)

您可以使用以下代码检查它是否来自标准值。

Sitecore.Data.Fields.Field title = item.Fields["title"];
title.ContainsStandardValue(); //boolean

或者,如果要检查标题字段的标准值的值

title.GetStandardValue(); //string

答案 1 :(得分:1)

我不确定您要查找的内容,但布局通常设置为标准值,然后在更改内容项的布局时应用布局增量。因此,与其他只是覆盖值的字段相比,这有点不同。

我猜你正在寻找像item.Fields [FieldIDs.Layout] .GetValue(false,false)这样的想法。如果本地项没有设置值,它将返回null,即它继承自标准值(或默认值)。这也适用于克隆等。它也适用于任何领域 - 而不仅仅是布局领域。

使用item.Fields []。HasValue时要小心,因为它在某些版本的Sitecore中存在错误,导致返回字段值的默认行为不正确。检查GetValue(false,false)是否返回null。

某些版本的Sitecore也可能在布局字段中放置一个空的“”标记,因此您的代码可能看起来像这样,以便捕捉我所知道的场景:

var layoutDelta = item.Fields[FieldIDs.LayoutField].GetValue(false,false);
if (string.IsNullOrWhiteSpace(layoutDelta) || string.Equals(layoutDelta, "<r />", StringComparison.InvariantCulture)) {
    // Item is using standard or default rendering, or has none.
}

/ Mikael

答案 2 :(得分:0)

如果您希望找到所有项目,那么&#34; Renderings&#34;字段不继承标准值,试试这个......

protected void CheckStdValues(Sitecore.Data.Items.Item root)
{
    foreach (Sitecore.Data.Items.Item itm in root.Children)
    {
        Sitecore.Collections.FieldCollection fields = itm.Fields;

        foreach (Sitecore.Data.Fields.Field fld in fields)
        {
            //fld = null if item does not contain such a field
            if (fld != null && !fld.ContainsStandardValue)
            {
                if (fld.Title == "Renderings" ) {                 
                    Response.Write(fld.Title.ToString() + " - " + itm.Paths.FullPath + "<br/>");
                }
            }
        }
        //Use recursion to loop through the entire tree under the root item
        CheckStdValues(itm);
    }
}