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;
        }
示例#4
0
        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));
 }