V8升级后Umbraco相关链接丢失

问题描述 投票:0回答:1

我有一个问题,从 Umbraco V7 升级到 V8 后,我的相关链接丢失了。我看到当我获取信息时,它们仍然存在于响应中,但我在仪表板中看不到它们。更新之前,数据类型为“RelatedLinks”,更新后,数据类型为“Multi Url Picker”

problem

.net umbraco
1个回答
0
投票

Umbraco v8 上的相关链接数据类型已更改为多 URL 选择器。您的第一步应该是检查这是否是配置或数据问题。

要检查这是否是数据问题,您可以使用相同的文档类型(和数据类型)创建一个新页面。如果没有显示任何错误,那么它一定与数据有关。

如果是数据错误,那么您可以尝试寻找解决方案来更新或创建数据。

如果您没有很多页面出现此问题,您可能需要考虑手动创建/更新出现此问题的内容页面。另一种选择是检查数据库以找出丢失的位并通过一些脚本更新数据。

最终方法可能是尝试通过创建 ValueConverter 来解决数据问题,类似于此:

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;
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.