/// <summary>
        /// Computes the value.
        /// </summary>
        /// <param name="indexable">The indexable.</param>
        /// <returns>The computed value.  In this case we return serialized JSON.</returns>
        public override object ComputeValue(ContentSearch.IIndexable indexable)
        {
            Assert.ArgumentNotNull(indexable, "indexable");
            var validatedItem = GetValidatedItem(indexable);

            if (validatedItem == null)
            {
                return(string.Empty);
            }

            List <string> childCategoryItemList = new List <string>();

            Category category = this.GetCategoryReadOnly(validatedItem.ID, validatedItem.Language.Name);

            if (category != null)
            {
                if (category.ChildCategories != null && category.ChildCategories.Count > 0)
                {
                    foreach (var childCategory in category.ChildCategories)
                    {
                        childCategoryItemList.Add(childCategory.ExternalId.ToString());
                    }
                }
            }

            return(childCategoryItemList);
        }
        /// <summary>
        /// Computes the value.
        /// </summary>
        /// <param name="indexable">The indexable.</param>
        /// <returns>The computed value.  In this case we return serialized JSON.</returns>
        public override object ComputeValue(ContentSearch.IIndexable indexable)
        {
            Assert.ArgumentNotNull(indexable, "indexable");
            var validatedItem = GetValidatedItem(indexable);

            if (validatedItem == null)
            {
                return(string.Empty);
            }

            List <VariantIndexInfo> variantInfoList = new List <VariantIndexInfo>();

            foreach (var productVariant in this.GetChildVariantsReadOnly(validatedItem.ID, validatedItem.Language.Name))
            {
                var variantInfo = new VariantIndexInfo();

                variantInfo.VariantId = this.GetVariantFieldValue <string>(productVariant, "VariantId");
                variantInfo.BasePrice = this.GetVariantFieldValue <decimal>(productVariant, "BasePriceVariant");
                variantInfo.ListPrice = productVariant.ListPrice;

                variantInfoList.Add(variantInfo);
            }

            return(JsonConvert.SerializeObject(variantInfoList));
        }
        /// <summary>
        /// Computes the value.
        /// </summary>
        /// <param name="indexable">The indexable.</param>
        /// <returns>The lower cased product id only for product template items.</returns>
        public override object ComputeValue(ContentSearch.IIndexable indexable)
        {
            Assert.ArgumentNotNull(indexable, "indexable");
            var validatedItem = GetValidatedItem(indexable);

            if (validatedItem == null || string.IsNullOrWhiteSpace(validatedItem.Name))
            {
                return(string.Empty);
            }

            return(validatedItem.Name.ToLower(CultureInfo.InvariantCulture));
        }