Sitecore JSS 限制在链接字段中检索的项目的深度
Sitecore JSS Limit depth of items retrieved in linked fields
我有一个页面的应用程序路由 A
并且正在加载所有字段,包括 link 的多列表到项目应用程序路由 B
可以在多列表中link 到项目 A
,创建一个无限循环。有没有办法将深度设置为只有一个级别?
AppRoute A:
fields:
multifield:
AppRoute B
AppRoute B:
fields:
multifield:
AppRoute A
有两个选项,你可以为配置文件创建一个补丁来更新layoutService serializationMaxDepth,但这会影响所有的Items:
<configuration>
<sitecore>
<settings>
<layoutService>
<serializationMaxDepth>2</serializationMaxDepth>
</layoutService>
</sitecore>
</configuration>
或者您可以创建自定义字段序列化解析器。
此 class 会将信息添加到字段中:
public class CustomFieldSerializer : BaseFieldSerializer
{
public CustomFieldSerializer (IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void WriteValue(Field field, JsonTextWriter writer)
{
writer.WriteStartObject();
writer.WritePropertyName(field.Name);
writer.WriteValue("Your custom field value here.");
writer.WriteEndObject();
}
}
这个 class 将是字段解析器:
public class GetCustomFieldSerializer : BaseGetFieldSerializer
{
public GetCustomFieldSerializer(IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void SetResult(GetFieldSerializerPipelineArgs args)
{
Assert.ArgumentNotNull((object)args, nameof(args));
args.Result = new CustomFieldSerializer(this.FieldRenderer);
}
}
这是将解析器 class 设置为您的字段的配置补丁。确保将您的配置(补丁:之前)放在字段默认序列化配置之前,在这种情况下,多重列表是 GetMultilistFieldSerializer
您可以在 https://<your-sitecore-domain>/sitecore/admin/showconfig.aspx
:
中查看
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<group groupName="layoutService">
<pipelines>
<getFieldSerializer>
<processor patch:before="processor[@type='Sitecore.LayoutService.Serialization.Pipelines.GetFieldSerializer.GetMultilistFieldSerializer, Sitecore.LayoutService']" type="Foundation.FieldSerializer.GetCustomFieldSerializer, Foundation.LayoutService" resolve="true">
<FieldTypes hint="list">
<fieldType id="1">multilist</fieldType>
</FieldTypes>
</processor>
</getFieldSerializer>
</pipelines>
</group>
</pipelines>
</sitecore>
</configuration>
我有一个页面的应用程序路由 A
并且正在加载所有字段,包括 link 的多列表到项目应用程序路由 B
可以在多列表中link 到项目 A
,创建一个无限循环。有没有办法将深度设置为只有一个级别?
AppRoute A:
fields:
multifield:
AppRoute B
AppRoute B:
fields:
multifield:
AppRoute A
有两个选项,你可以为配置文件创建一个补丁来更新layoutService serializationMaxDepth,但这会影响所有的Items:
<configuration>
<sitecore>
<settings>
<layoutService>
<serializationMaxDepth>2</serializationMaxDepth>
</layoutService>
</sitecore>
</configuration>
或者您可以创建自定义字段序列化解析器。
此 class 会将信息添加到字段中:
public class CustomFieldSerializer : BaseFieldSerializer
{
public CustomFieldSerializer (IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void WriteValue(Field field, JsonTextWriter writer)
{
writer.WriteStartObject();
writer.WritePropertyName(field.Name);
writer.WriteValue("Your custom field value here.");
writer.WriteEndObject();
}
}
这个 class 将是字段解析器:
public class GetCustomFieldSerializer : BaseGetFieldSerializer
{
public GetCustomFieldSerializer(IFieldRenderer fieldRenderer)
: base(fieldRenderer)
{
}
protected override void SetResult(GetFieldSerializerPipelineArgs args)
{
Assert.ArgumentNotNull((object)args, nameof(args));
args.Result = new CustomFieldSerializer(this.FieldRenderer);
}
}
这是将解析器 class 设置为您的字段的配置补丁。确保将您的配置(补丁:之前)放在字段默认序列化配置之前,在这种情况下,多重列表是 GetMultilistFieldSerializer
您可以在 https://<your-sitecore-domain>/sitecore/admin/showconfig.aspx
:
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<group groupName="layoutService">
<pipelines>
<getFieldSerializer>
<processor patch:before="processor[@type='Sitecore.LayoutService.Serialization.Pipelines.GetFieldSerializer.GetMultilistFieldSerializer, Sitecore.LayoutService']" type="Foundation.FieldSerializer.GetCustomFieldSerializer, Foundation.LayoutService" resolve="true">
<FieldTypes hint="list">
<fieldType id="1">multilist</fieldType>
</FieldTypes>
</processor>
</getFieldSerializer>
</pipelines>
</group>
</pipelines>
</sitecore>
</configuration>