/// <summary> /// Find best SEO record using score base rules /// http://docs.virtocommerce.com/display/vc2devguide/SEO /// </summary> /// <param name="seoRecords"></param> /// <param name="store"></param> /// <param name="language"></param> /// <param name="slug"></param> /// <returns></returns> public static VirtoCommerceDomainCommerceModelSeoInfo GetBestMatchedSeoInfo(this IEnumerable <VirtoCommerceDomainCommerceModelSeoInfo> seoRecords, Store store, Language language, string slug = null) { VirtoCommerceDomainCommerceModelSeoInfo result = null; if (seoRecords != null) { result = seoRecords .Select(s => { var score = 0; if (!string.IsNullOrEmpty(slug)) { score += slug.EqualsInvariant(s.SemanticUrl) ? 8 : 0; } score += store.Id.EqualsInvariant(s.StoreId) ? 4 : 0; score += language.Equals(s.LanguageCode) ? 2 : 0; score += store.DefaultLanguage.Equals(s.LanguageCode) ? 1 : 0; return(new { SeoRecord = s, Score = score }); }) .OrderByDescending(x => x.Score) .Select(x => x.SeoRecord) .FirstOrDefault(); } return(result); }
public static VirtoCommerceDomainCommerceModelSeoInfo FindBestSeoMatch(this IEnumerable <VirtoCommerceDomainCommerceModelSeoInfo> seoRecords, Language language, Store store) { VirtoCommerceDomainCommerceModelSeoInfo retVal = null; if (seoRecords != null) { retVal = seoRecords.Select(x => { var score = 0; score += language.Equals(x.LanguageCode) ? 2 : 0; score += store.Id.Equals(x.StoreId, StringComparison.OrdinalIgnoreCase) ? 3 : 0; score += store.DefaultLanguage.Equals(x.LanguageCode) ? 1 : 0; return(new { SeoRecord = x, Score = score }); }).OrderByDescending(x => x.Score).Select(x => x.SeoRecord).FirstOrDefault(); } return(retVal); }