using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.PropertyEditors.ValueConverters;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Web;
namespace AnUmbracoV10ProjectName.Configurator.Core.Util
{
public class IntUdiMultiNodeTreePickerValueConverter : MultiNodeTreePickerValueConverter
{
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
public IntUdiMultiNodeTreePickerValueConverter(IPublishedSnapshotAccessor publishedSnapshotAccessor, IUmbracoContextAccessor umbracoContextAccessor, IMemberService memberService) : base(publishedSnapshotAccessor, umbracoContextAccessor, memberService)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
}
public override object? ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object? source, bool preview)
{
if (source == null)
{
return null;
}
if (propertyType.EditorAlias.Equals(Umbraco.Cms.Core.Constants.PropertyEditors.Aliases.MultiNodeTreePicker))
{
Udi?[]? nodeIds = source.ToString()?
.Split(Umbraco.Cms.Core.Constants.CharArrays.Comma, StringSplitOptions.RemoveEmptyEntries)
.Select(ParseUdiOrInt)
.ToArray();
return nodeIds;
}
return null;
}
protected Udi? ParseUdiOrInt(string id)
{
if (UdiParser.TryParse(id, out var udi))
{
return udi;
}
if (Int32.TryParse(id, out var integer))
{
if (_publishedSnapshotAccessor.TryGetPublishedSnapshot(out var publishedSnapshot))
{
var item = publishedSnapshot?.Media?.GetById(integer);
if (item is not null)
{
return new GuidUdi(Umbraco.Cms.Core.Constants.UdiEntityType.Media, item.Key);
}
}
}
return null;
}
}
}
1条答案
按热度按时间yhxst69z1#
在Umbraco v8上,相关链接数据类型已更改为Multi Url Picker。您的第一步应该是检查您的问题是配置问题还是数据问题。
要检查这是否是数据问题,您可以使用相同的文档类型(和数据类型)创建一个新页面。如果它没有显示任何错误,则它必须与数据相关。
如果是数据错误,那么您可以尝试寻找解决方案来更新或创建数据。
如果你没有太多的页面有这个问题,你可能需要考虑手动创建/更新有这个问题的内容页面。另一个选择是检查数据库,找出丢失的位,并通过一些脚本更新数据。
最后一种方法可以尝试通过创建一个ValueConverter来修复数据问题,类似于下面的代码:
字符串
x1c 0d1x的数据