예제 #1
0
        /// <summary>
        /// Method to compute RenderingsContent
        /// </summary>
        /// <param name="indexable">indexable object.</param>
        /// <returns>object.</returns>
        public object ComputeFieldValue(Sitecore.ContentSearch.IIndexable indexable)
        {
            string renderingsContent = string.Empty;
            SitecoreIndexableItem sitecoreIndexable = null;

            try
            {
                sitecoreIndexable = indexable as SitecoreIndexableItem;

                if (sitecoreIndexable == null)
                {
                    return(null);
                }

                TemplateItem[] baseTemplates = sitecoreIndexable.Item.Template.BaseTemplates;
                if (baseTemplates.Length > 0)
                {
                    string basePageTemplateId = SitecoreSettings.BasePageTemplateId.ToUpper().Replace("{", string.Empty).Replace("}", string.Empty);
                    foreach (TemplateItem baseTemplate in baseTemplates)
                    {
                        if (baseTemplate.ID.Guid.ToString().ToUpper().Equals(basePageTemplateId))
                        {
                            // find renderings with datasources set
                            var customDataSources = ExtractRenderingDataSourceItems(sitecoreIndexable.Item);

                            // extract text from data sources
                            var contentToAdd = customDataSources.SelectMany(GetItemContent).ToList();

                            if (contentToAdd.Count == 0)
                            {
                                return(renderingsContent);
                            }

                            renderingsContent = string.Join(" ", contentToAdd);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string itemId = string.Empty;
                if (sitecoreIndexable.Item != null)
                {
                    itemId = sitecoreIndexable.Item.ID.ToString();
                }
                Log.Error(this.GetType().Name + " - Item ID: " + itemId, ex, this);
            }
            return(renderingsContent);
        }
예제 #2
0
        public object ComputeFieldValue(Sitecore.ContentSearch.IIndexable indexable)
        {
            var indexableItem = indexable as SitecoreIndexableItem;

            if (indexableItem == null)
            {
                return(null);
            }

            var item = (Sitecore.Data.Items.Item)indexableItem;

            if (item == null)
            {
                return(null);
            }

            var value = item[SourceFieldName];

            return((value != "").ToString());
        }
예제 #3
0
        public object ComputeFieldValue(Sitecore.ContentSearch.IIndexable indexable)
        {
            Item          item = (Item)(indexable as SitecoreIndexableItem);
            List <string> list = new List <string>();

            if (item.IsValidType <BlogPost>())
            {
                List <Category> categoryItems = item.CreateAs <BlogPost>().Categories.ToList();
                if (categoryItems.Any())
                {
                    categoryItems.ForEach(tItem =>
                    {
                        if (tItem != null)
                        {
                            list.Add(tItem.CategoryName);
                        }
                    });
                }
            }
            return(list);
        }
        public object ComputeFieldValue(Sitecore.ContentSearch.IIndexable indexable)
        {
            var indexableItem = indexable as SitecoreIndexableItem;

            if (indexableItem == null)
            {
                return(null);
            }

            var item = (Sitecore.Data.Items.Item)indexableItem;

            if (item == null)
            {
                return(null);
            }

            var latLon = item[SourceFieldName];

            if (latLon == "" || latLon == "NULL")
            {
                return(null);
            }

            // Convert from georss point to normal X, Y format
            latLon = latLon.Replace(" ", ", ");

            var spatialContext = SpatialContext.GEO;
            var geohashTree    = new GeohashPrefixTree(spatialContext, 10);
            var strategy       = new RecursivePrefixTreeStrategy(geohashTree, FieldName);

            var          shape            = spatialContext.ReadShape(latLon);
            var          grid             = strategy.GetGrid();
            int          levelForDistance = grid.GetLevelForDistance(strategy.DistErrPct);
            IList <Node> list             = grid.GetNodes(shape, levelForDistance, true);

            return(list.Select(node => node.GetTokenString()));
        }
        public object ComputeFieldValue(Sitecore.ContentSearch.IIndexable indexable)
        {
            if (SiteContext == null)
            {
                return(null);
            }

            var indexItem = indexable as SitecoreIndexableItem;

            if (indexItem == null)
            {
                return(null);
            }

            var item = (Sitecore.Data.Items.Item)indexItem.Item;

            if (item == null)
            {
                return(null);
            }

            if (!item.Template.DescendsFrom(TemplateIDs.ProductBase))
            {
                return(null);
            }

            using (new ShopContextSwitcher(SiteContext, item.Database))
            {
                var repository = Sitecore.Ecommerce.Context.Entity.Resolve <IAdvancedProductRepository>();
                var product    = repository.GetProduct <ProductBaseData>(item);
                if (product == null)
                {
                    return(null);
                }
                return(ComputeFieldValue(product, indexable));
            }
        }
예제 #6
0
        public object ComputeFieldValue(Sitecore.ContentSearch.IIndexable indexable)
        {
            var item = (Item)(indexable as SitecoreIndexableItem);

            if (item == null)
            {
                return(null);
            }

            // optimization to reduce indexing time
            // by skipping this logic for items in the Core database
            if (System.String.Compare(
                    item.Database.Name,
                    "core",
                    System.StringComparison.OrdinalIgnoreCase) == 0)
            {
                return(null);
            }


            if (item.Paths.IsMediaItem)
            {
                //skip media root and folder items
                if (item.TemplateID != Sitecore.TemplateIDs.MediaFolder &&
                    item.ID != Sitecore.ItemIDs.MediaLibraryRoot)
                {
                    return(null);
                }
            }

            //From Sitecore 8.0 onwards we need to look in Final Renderings for latest content versions
            LayoutField layoutField = item.Fields["__Final Renderings"];

            RenderingReference[] renderings = layoutField.GetReferences(GetDefaultDevice(item.Database));

            if (renderings == null)
            {
                return(null);
            }

            StringBuilder sb = new StringBuilder();

            foreach (var renderingReference in renderings)
            {
                var datasourceId = renderingReference.Settings.DataSource;

                //Check if datasource has been set or we get null reference errors
                if (!string.IsNullOrWhiteSpace(datasourceId))
                {
                    var referencedItem = item.Database.GetItem(datasourceId, item.Language);
                    foreach (Field field in referencedItem.Fields)
                    {
                        if (!field.IsStandardTemplateField())
                        {
                            if (field.Type == "Single-Line Text" || field.Type == "Rich Text")
                            {
                                sb.Append(" ").Append(StripTags(field.Value));
                            }
                        }
                    }
                }
            }

            return(sb.ToString().Trim());
        }
 protected abstract object ComputeFieldValue(ProductBaseData product, Sitecore.ContentSearch.IIndexable indexable);