* Started work on service * temp work * temp commit * Temp commit * Added more routing logic * Fixed tests * Refactor and prepare for isdraft * Work on drafts * Fixed tests * Move to enlistment to ensure caches is only updated on scope complete * Clean up and handle null cultures * Added functionality to the INavigationQueryService to get root keys * Added migration * Fixed issue with navigation * Added migration * Temp commit, move to cache refreshers. * Fixed issues * List urls * fix build * Fixed integration tests * Refactor to create new content finder instead of changing the old * rollback wrong commited line * Clean up, and use docuemnt url service for index * Fixed List endpoin * Do not use Navigation service in methods intended by management api * Fixed examine tests * Make methods virtual * Use domain from published request * Use hybrid cache from new content finder * Eliminate nucache usage * Fixed issue with delivery api and url generation * Fixed linux tests * Added hybrid cache to all integration tests
48 lines
1.6 KiB
C#
48 lines
1.6 KiB
C#
using Umbraco.Cms.Core.Models;
|
|
using Umbraco.Cms.Core.Strings;
|
|
|
|
namespace Umbraco.Extensions;
|
|
|
|
/// <summary>
|
|
/// Provides extension methods to IContentBase to get URL segments.
|
|
/// </summary>
|
|
public static class ContentBaseExtensions
|
|
{
|
|
private static DefaultUrlSegmentProvider? _defaultUrlSegmentProvider;
|
|
|
|
/// <summary>
|
|
/// Gets the URL segment for a specified content and culture.
|
|
/// </summary>
|
|
/// <param name="content">The content.</param>
|
|
/// <param name="shortStringHelper"></param>
|
|
/// <param name="urlSegmentProviders"></param>
|
|
/// <param name="culture">The culture.</param>
|
|
/// <param name="published">Whether to get the published or draft.</param>
|
|
/// <returns>The URL segment.</returns>
|
|
public static string? GetUrlSegment(this IContentBase content, IShortStringHelper shortStringHelper, IEnumerable<IUrlSegmentProvider> urlSegmentProviders, string? culture = null, bool published = true)
|
|
{
|
|
if (content == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(content));
|
|
}
|
|
|
|
if (urlSegmentProviders == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(urlSegmentProviders));
|
|
}
|
|
|
|
var url = urlSegmentProviders.Select(p => p.GetUrlSegment(content, published, culture)).FirstOrDefault(u => u != null);
|
|
if (url == null)
|
|
{
|
|
if (_defaultUrlSegmentProvider == null)
|
|
{
|
|
_defaultUrlSegmentProvider = new DefaultUrlSegmentProvider(shortStringHelper);
|
|
}
|
|
|
|
url = _defaultUrlSegmentProvider.GetUrlSegment(content, culture); // be safe
|
|
}
|
|
|
|
return url;
|
|
}
|
|
}
|