如果我的Sitecore渲染字段是否继承标准值,我如何以编程方式确定?
我可以用这个...来获取渲染字段的标准值。
var ss = StandardValuesManager.GetStandardValue(rootrenderingfield);
我也可以解析渲染的id,但是真的需要知道继承,所以我可以执行渲染引用删除......
答案 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);
}
}