Example #1
0
        /// <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);
        }
Example #2
0
        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);
        }