sitecore - Sitecore JSS 限制在链接字段中检索到的项目的深度
问题描述
我有一个A
页面的 App Route 并且正在加载所有字段,包括一个链接到 Item App Route 的多列表B
,它可以在多列表中具有指向 Item 的链接A
,从而创建一个无限循环。有没有办法将深度设置为只有一个级别?
AppRoute A:
fields:
multifield:
AppRoute B
AppRoute B:
fields:
multifield:
AppRoute A
解决方案
有两个选项,你可以为配置文件创建一个补丁来更新layoutService serializationMaxDepth,但这会影响所有的Item:
<configuration>
<sitecore>
<settings>
<layoutService>
<serializationMaxDepth>2</serializationMaxDepth>
</layoutService>
</sitecore>
</configuration>
或者您可以创建自定义字段序列化解析器。
此类将信息添加到字段中:
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();
}
}
这个类将是字段解析器:
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);
}
}
这是将解析器类设置为您的字段的配置补丁。确保将您的 config(patch:before) 放在字段默认序列化配置之前,在这种情况下,GetMultilistFieldSerializer
您可以在 multililist 中检查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>
推荐阅读
- javascript - Javascript如何在创建数组以从不同函数访问时不使用全局变量
- github - 如何使 FindMyPackage.cmake 模块回退到下载?
- php - 如何避免使用 PHP 抓取 Instagram 时出现 503 错误?
- android - 无法在 android(Java) 中传递有关先前活动的数据
- php - 在 000webhost 上编辑、删除、上传有时工作有时不是 php
- ruby-on-rails - Ruby on Rails - 排序排序的用户输入
- django - 无法按 country__name 对查询集进行排序
- apache-spark - 保留火花结构化流中给定键的最后一行
- mysql - 从具有类别和子类别的表中进行选择的 SQL 查询
- python - Python中上下文管理器和装饰器之间的区别