public override string GetItemUrl(Sitecore.Data.Items.Item item, Sitecore.Links.UrlOptions options) { Assert.ArgumentNotNull(item, "item"); Assert.ArgumentNotNull(options, "options"); // Store real item for later use Item realItem = item; // Check if item is an wildcard item bool isWildcardItem = item.IsDatasourceItemForWildcard(); if (isWildcardItem) { item = Context.Database.GetItem(WildcardProvider.GetSetting(item.TemplateID).ItemID); } if (item == null) { item = realItem; } string text = base.GetItemUrl(item, options); if (isWildcardItem) { text = WildcardProvider.GetWildcardItemUrl(item, realItem, UseDisplayName); } return(text.ToLower()); }
public static Item RealItem(this Item item) { var wildcardItem = WildcardProvider.GetContextWildcardItem(); if (wildcardItem == null) { wildcardItem = item; } return(wildcardItem); }
public override void Process(HttpRequestArgs args) { if (!WildcardProvider.IsWildcardItem(Context.Item)) { return; } string itemName = ResolveItemNameFromUrl(args.Context); var datasourceItem = WildcardProvider.GetDatasourceItem(Context.Item, itemName); if (datasourceItem == null) { return; } args.Context.Items[AppConstants.ContextItemKey] = Context.Item; Context.Item = datasourceItem; }
protected new virtual Item ResolveItem(GetPageItemArgs args) { string path = this.GetPath(args.RouteData); if (string.IsNullOrEmpty(path)) { return(null); } Item wildcardItem = this.GetItem(path, args); if (wildcardItem == null) { return(null); } if (!wildcardItem.IsWildcardItem()) { return(wildcardItem); } ReferenceField datasourceReference = wildcardItem.Fields[AppConstants.WildcardDatasourceField]; if (datasourceReference == null || datasourceReference.TargetItem == null) { return(wildcardItem); } if (HttpContext.Current.Items.Contains(AppConstants.ContextItemKey)) { HttpContext.Current.Items[AppConstants.ContextItemKey] = wildcardItem; } else { HttpContext.Current.Items.Add(AppConstants.ContextItemKey, wildcardItem); } string itemRelativePath = StringUtil.EnsurePrefix('/', WildcardProvider.GetWildCardItemRelativeSitecorePathFromUrl(path, wildcardItem)); string itemPath = string.Concat(datasourceReference.TargetItem.Paths.FullPath, itemRelativePath); string[] pathSegments = itemPath.Split('/'); return(WildcardProvider.GetDatasourceItem(string.Join("/", pathSegments.Take(pathSegments.Length - 1)), pathSegments.LastOrDefault())); }
public static bool IsDatasourceItemForWildcard(this Item item) { return(WildcardProvider.GetSetting(item.TemplateID) != null); }
public static bool IsWildcardItem(this Item item) { return(WildcardProvider.IsWildcardItem(item)); }