A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More.
AI OnAI Off
A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More.
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?