Join us this Friday for AI in Action at the Virtual Happy Hour! This free virtual event is open to all—enroll now on Academy and don’t miss out.
Join us this Friday for AI in Action at the Virtual Happy Hour! This free virtual event is open to all—enroll now on Academy and don’t miss out.
Ended up using an ApiModelProperty to store the pages that fallback. Something like this:
namespace X.X.X;
using System;
using System.Collections.Generic;
using System.Linq;
using EPiServer.ContentApi.Core.Serialization.Models;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.ServiceLocation;
using EPiServer.Web.Routing;
using Optimizely.ContentGraph.Cms.Core.ContentApiModelProperties.Internal;
using Optimizely.ContentGraph.Cms.NetCore.Extensions.Internal;
[ServiceConfiguration(typeof(IContentApiModelProperty), Lifecycle = ServiceInstanceScope.Singleton)]
public class FallbackLanguagesApiModelProperty(
ILanguageBranchRepository languageBranchRepository,
IUrlResolver urlResolver,
IContentLanguageSettingsHandler contentLanguageSettingsHandler) : IContentApiModelProperty
{
public object GetValue(ContentApiModel contentApiModel)
{
if(contentApiModel.ContentLink != null)
{
var enabledLanguages = languageBranchRepository.ListEnabled();
var pagesThatFallBackToCurrentPage = new List<string>();
var cRef = contentApiModel.ContentLink.ToContentReference();
foreach (var enabledLanguage in enabledLanguages)
{
var fallbackLanguages = contentLanguageSettingsHandler.GetFallbackLanguages(cRef, enabledLanguage.Culture.Name);
if (fallbackLanguages.Any() && fallbackLanguages.Contains(contentApiModel.Language.Name))
{
var lang = enabledLanguage.Culture.Name;
var url = urlResolver.GetUrl(cRef, lang);
pagesThatFallBackToCurrentPage.Add($"{lang}|{url}");
}
}
return pagesThatFallBackToCurrentPage;
}
else
{
return new List<string>();
}
}
public string Name => "PagesThatFallback";
}
And a rough query to return the right data:
query MyQuery {
SitePageData(
locale: [en, en_GB]
where:
{
_or: [
{ PagesThatFallback: { startsWith: "en-gb" } },
{ Language: { Name: { eq: "en-gb" } }}
]
}
) {
total
items {
Name
Url
Language
{
Name
}
PagesThatFallback
}
}
}
Note, I haven't fully implemented this, so I'll let you know how it goes and any tweaks I make
I know that fallback languages aren't currently supported in Opti Graph, and it will be "soon" (not sure what "soon" means though). Has anyone come up with a workaround for fallback languages yet?