public SeoUrlKeyword[] GetSeoKeywords(SeoUrlKeywordTypes type, string language = null, string keyword = null, string keywordvalue = null) { if (keyword == null && keywordvalue == null) { throw new ArgumentNullException("keyword","Keyword or KeywordValue must be provided"); } var allKeywords = GetAllSeoKeywords(); return allKeywords.Where( s => (language == null || language.Equals(s.Language, StringComparison.OrdinalIgnoreCase)) && (keyword == null || keyword.Equals(s.Keyword, StringComparison.OrdinalIgnoreCase)) && (keywordvalue == null || keywordvalue.Equals(s.KeywordValue, StringComparison.OrdinalIgnoreCase)) && (int)type == s.KeywordType && s.IsActive).ToArray(); /* return CacheHelper.Get(string.Format(SeoKeywordCacheKey, type, language ?? "", keyword ?? "", keywordvalue ?? ""), () => _appConfigRepository.SeoUrlKeywords .Where(s => (language == null || language.Equals(s.Language, StringComparison.OrdinalIgnoreCase)) && (keyword == null || keyword.Equals(s.Keyword, StringComparison.OrdinalIgnoreCase)) && (keywordvalue == null || keywordvalue.Equals(s.KeywordValue, StringComparison.OrdinalIgnoreCase)) && (int)type == s.KeywordType && s.IsActive).ToArray(), AppConfigConfiguration.Instance.Cache.SeoKeywordsTimeout, _isEnabled); * */ }
protected virtual void DecodeRouteData(RouteValueDictionary values, SeoUrlKeywordTypes type) { string routeValueKey = type.ToString().ToLower(); var language = values.ContainsKey(Constants.Language) ? values[Constants.Language] as string : null; if (values.ContainsKey(routeValueKey) && values[routeValueKey] != null) { values[routeValueKey] = SettingsHelper.SeoDecode(values[routeValueKey].ToString(), type, language); } }
protected virtual void EncodeVirtualPath(RouteValueDictionary values, SeoUrlKeywordTypes type) { var routeValueKey = type.ToString().ToLower(); var language = values.ContainsKey(Constants.Language) ? values[Constants.Language] as string : Thread.CurrentThread.CurrentUICulture.Name; if (values.ContainsKey(routeValueKey) && values[routeValueKey] != null) { values[routeValueKey] = this.EncodeRouteValue(values[routeValueKey].ToString(), type, language); } }
public SeoUrlKeyword[] GetSeoKeywords(SeoUrlKeywordTypes type, string language = null, string keyword = null, string keywordvalue = null) { if (keyword == null && keywordvalue == null) { throw new ArgumentNullException("keyword", "Keyword or KeywordValue must be provided"); } var allKeywords = GetAllSeoKeywords(); return (allKeywords.Where( s => (language == null || language.Equals(s.Language, StringComparison.OrdinalIgnoreCase)) && (keyword == null || keyword.Equals(s.Keyword, StringComparison.OrdinalIgnoreCase)) && (keywordvalue == null || keywordvalue.Equals(s.KeywordValue, StringComparison.OrdinalIgnoreCase)) && (int)type == s.KeywordType && s.IsActive).ToArray()); }
public SeoUrlKeyword[] GetSeoKeywords(SeoUrlKeywordTypes type, string language = null, string keyword = null, string keywordvalue = null) { if (keyword == null && keywordvalue == null) { throw new ArgumentNullException("keyword","Keyword or KeywordValue must be provided"); } var allKeywords = GetAllSeoKeywords(); return allKeywords.Where( s => (language == null || language.Equals(s.Language, StringComparison.OrdinalIgnoreCase)) && (keyword == null || keyword.Equals(s.Keyword, StringComparison.OrdinalIgnoreCase)) && (keywordvalue == null || keywordvalue.Equals(s.KeywordValue, StringComparison.OrdinalIgnoreCase)) && (int)type == s.KeywordType && s.IsActive).ToArray(); }
private string EncodeRouteValue(string routeValue, SeoUrlKeywordTypes type, string language = null) { if (!string.IsNullOrEmpty(routeValue)) { routeValue = routeValue.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).Last(); var keyword = routeValue; // this.GetKeyword(routeValue, type, language); Sasha: routevalue here is already a keyword var client = ClientContext.Clients.CreateBrowseClient(); if (keyword != null) { switch (type) { case SeoUrlKeywordTypes.Store: case SeoUrlKeywordTypes.Item: return(routeValue); case SeoUrlKeywordTypes.Category: /* * var category = * Task.Run( * () => * client.GetCategoryAsync(routeValue)) * .Result.AsWebModel(); * if (category != null) * { * return string.Join("/", category.BuildOutline(language).Select(x => x.Value)); * } * */ return(routeValue); // routevalue for category is outline } } } return(routeValue); }
private static string SeoDecodeInternal(string keyword, SeoUrlKeywordTypes type, string language = null) { var seoKeyword = SeoKeyword(keyword, type, language, false); return(seoKeyword != null ? seoKeyword.KeywordValue : keyword); }
/// <summary> /// Decodes the given SEO keyword to original value. /// </summary> /// <param name="keyword">The keyword.</param> /// <param name="type">The type.</param> /// <param name="language">The language.</param> /// <returns></returns> public static string SeoDecode(string keyword, SeoUrlKeywordTypes type, string language = null, char seperator = '/') { var decoded = keyword.Split(new[] { seperator }).Select(x => SeoDecodeInternal(x, type, language)).ToList(); return(string.Join(seperator.ToString(CultureInfo.InvariantCulture), decoded)); }
private static string SeoEncodeInternal(string value, SeoUrlKeywordTypes type, string language = null) { var seoKeyword = SeoKeyword(value, type, language); return(seoKeyword != null ? seoKeyword.Keyword : value); }
public static SeoUrlKeyword SeoKeyword(string val, SeoUrlKeywordTypes type, string language = null, bool byValue = true) { language = language ?? CustomerSession.Language; var langInfo = TryGetCultureInfo(language); language = langInfo != null ? langInfo.Name : language; var seoKeywords = byValue ? SeoKeywordClient.GetSeoKeywords(type, keywordvalue: val) : SeoKeywordClient.GetSeoKeywords(type, keyword: val); //Filter keywords with valid language seoKeywords = seoKeywords.Where(x => TryGetCultureInfo(x.Language) != null).ToArray(); //If not found for given langauge try default store language if (seoKeywords.Length != 0) { var seoKeyword = seoKeywords.FirstOrDefault(x => x.Language.Equals(language, StringComparison.InvariantCultureIgnoreCase)); if (seoKeyword != null) { return(seoKeyword); } //Default language failover scenario var store = StoreHelper.StoreClient.GetCurrentStore(); //Current store can be null when called from StoreHttpModule and store is not yet initialzed if (store == null && type == SeoUrlKeywordTypes.Store) { store = StoreHelper.StoreClient.GetStoreById(seoKeywords[0].KeywordValue); } if (store != null && !store.DefaultLanguage.Equals(language, StringComparison.OrdinalIgnoreCase)) { seoKeyword = seoKeywords.FirstOrDefault(x => x.Language.Equals(store.DefaultLanguage, StringComparison.InvariantCultureIgnoreCase)); //If we managed to decode in default language need to check if same value was not encoded in original language if (seoKeyword != null) { //If we are encodoing simply encode it in default language, because not found in original language if (byValue) { return(seoKeyword); } //If it was encoded in original language it should not allow to decode in default language. //ex.: say in in english we have category keyword video with value tv-video and in russian there is also same value with keyword videoRussian //If requested language is russian and keyword video we would get null, but default language (suppose is english) would return tv-video var originalKeyword = SeoKeywordClient.GetSeoKeywords(type, language, keywordvalue: seoKeyword.KeywordValue) .FirstOrDefault(); if (originalKeyword == null) { return(seoKeyword); } } } } return(null); }
public static SeoUrlKeyword SeoKeyword(string val, SeoUrlKeywordTypes type, string language = null, bool byValue = true) { language = language ?? CustomerSession.Language; var langInfo = TryGetCultureInfo(language); language = langInfo != null ? langInfo.Name : language; var seoKeywords = byValue ? SeoKeywordClient.GetSeoKeywords(type, keywordvalue: val) : SeoKeywordClient.GetSeoKeywords(type, keyword:val); //Filter keywords with valid language seoKeywords = seoKeywords.Where(x => TryGetCultureInfo(x.Language) != null).ToArray(); //If not found for given langauge try default store language if (seoKeywords.Length != 0) { var seoKeyword = seoKeywords.FirstOrDefault(x => x.Language.Equals(language, StringComparison.InvariantCultureIgnoreCase)); if (seoKeyword != null) { return seoKeyword; } //Default language failover scenario var store = StoreHelper.StoreClient.GetCurrentStore(); //Current store can be null when called from StoreHttpModule and store is not yet initialzed if (store == null && type == SeoUrlKeywordTypes.Store) { store = StoreHelper.StoreClient.GetStoreById(seoKeywords[0].KeywordValue); } if (store != null && !store.DefaultLanguage.Equals(language, StringComparison.OrdinalIgnoreCase)) { seoKeyword = seoKeywords.FirstOrDefault(x => x.Language.Equals(store.DefaultLanguage, StringComparison.InvariantCultureIgnoreCase)); //If we managed to decode in default language need to check if same value was not encoded in original language if (seoKeyword != null) { //If we are encodoing simply encode it in default language, because not found in original language if (byValue) { return seoKeyword; } //If it was encoded in original language it should not allow to decode in default language. //ex.: say in in english we have category keyword video with value tv-video and in russian there is also same value with keyword videoRussian //If requested language is russian and keyword video we would get null, but default language (suppose is english) would return tv-video var originalKeyword = SeoKeywordClient.GetSeoKeywords(type, language, keywordvalue: seoKeyword.KeywordValue) .FirstOrDefault(); if (originalKeyword == null) { return seoKeyword; } } } } return null; }
private static string SeoDecodeInternal(string keyword, SeoUrlKeywordTypes type, string language = null) { var seoKeyword = SeoKeyword(keyword, type, language, false); return seoKeyword != null ? seoKeyword.KeywordValue : keyword; }
/// <summary> /// Decodes the given SEO keyword to original value. /// </summary> /// <param name="keyword">The keyword.</param> /// <param name="type">The type.</param> /// <param name="language">The language.</param> /// <returns></returns> public static string SeoDecode(string keyword, SeoUrlKeywordTypes type, string language = null, char seperator = '/') { var decoded = keyword.Split(new[] { seperator }).Select(x => SeoDecodeInternal(x, type, language)).ToList(); return string.Join(seperator.ToString(CultureInfo.InvariantCulture), decoded); }
private static string SeoEncodeInternal(string value, SeoUrlKeywordTypes type, string language = null) { var seoKeyword = SeoKeyword(value, type, language); return seoKeyword != null ? seoKeyword.Keyword : value; }
protected virtual void DecodeRouteData(RouteValueDictionary values, SeoUrlKeywordTypes type) { // Need to skip decoding values in routes temporary because Sitemap calls GetRouteData and compares the values with the ones stored in siteMapNode // Sitemap node is configured to preserve route values and they are encoded. // If values in current route does not match node route values sitemap fails to resolve current node if (HttpContext.Current.Items.Contains(Constants.SkipSeoDecodeKey) && (bool)HttpContext.Current.Items[Constants.SkipSeoDecodeKey]) return; string routeValueKey = type.ToString().ToLower(); var language = values.ContainsKey(Constants.Language) ? values[Constants.Language] as string : null; if (values.ContainsKey(routeValueKey) && values[routeValueKey] != null) { values[routeValueKey] = SettingsHelper.SeoDecode(values[routeValueKey].ToString(), type, language); } }