コード例 #1
0
        public async ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, TemplateContext ctx)
        {
            if (!ctx.AmbientValues.TryGetValue("Services", out var services))
            {
                throw new ArgumentException("Services missing while invoking 'inherited_terms'");
            }

            ContentItem taxonomy          = null;
            string      termContentItemId = null;

            var contentManager = ((IServiceProvider)services).GetRequiredService <IContentManager>();

            if (input.Type == FluidValues.Object && input.ToObjectValue() is ContentItem term)
            {
                termContentItemId = term.ContentItemId;
            }
            else
            {
                termContentItemId = input.ToStringValue();
            }

            var firstArg = arguments.At(0);

            if (firstArg.Type == FluidValues.Object && input.ToObjectValue() is ContentItem contentItem)
            {
                taxonomy = contentItem;
            }
            else
            {
                taxonomy = await contentManager.GetAsync(firstArg.ToStringValue());
            }

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

            var terms = new List <ContentItem>();

            TaxonomyOrchardHelperExtensions.FindTermHierarchy(taxonomy.Content.TaxonomyPart.Terms as JArray, termContentItemId, terms);

            return(FluidValue.Create(terms));
        }
コード例 #2
0
        public async ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, LiquidTemplateContext ctx)
        {
            ContentItem taxonomy          = null;
            string      termContentItemId = null;

            if (input.Type == FluidValues.Object && input.ToObjectValue() is ContentItem term)
            {
                termContentItemId = term.ContentItemId;
            }
            else
            {
                termContentItemId = input.ToStringValue();
            }

            var firstArg = arguments.At(0);

            if (firstArg.Type == FluidValues.Object && input.ToObjectValue() is ContentItem contentItem)
            {
                taxonomy = contentItem;
            }
            else
            {
                taxonomy = await _contentManager.GetAsync(firstArg.ToStringValue());
            }

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

            var terms = new List <ContentItem>();

            TaxonomyOrchardHelperExtensions.FindTermHierarchy(taxonomy.Content.TaxonomyPart.Terms as JArray, termContentItemId, terms);

            return(FluidValue.Create(terms, ctx.Options));
        }
コード例 #3
0
        public override async Task BuildIndexAsync(TaxonomyField field, BuildFieldIndexContext context)
        {
            // TODO: Also add the parents of each term, probably as a separate field

            var options = context.Settings.ToOptions();

            options |= DocumentIndexOptions.Store;

            // Directly selected term ids are added to the default field name
            foreach (var contentItemId in field.TermContentItemIds)
            {
                foreach (var key in context.Keys)
                {
                    context.DocumentIndex.Set(key, contentItemId, options);
                }
            }

            // Inherited term ids are added to a distinct field, prefixed with "Inherited"
            var contentManager = _serviceProvider.GetRequiredService <IContentManager>();
            var taxonomy       = await contentManager.GetAsync(field.TaxonomyContentItemId);

            var inheritedContentItems = new List <ContentItem>();

            foreach (var contentItemId in field.TermContentItemIds)
            {
                TaxonomyOrchardHelperExtensions.FindTermHierarchy(taxonomy.Content.TaxonomyPart.Terms as JArray, contentItemId, inheritedContentItems);
            }

            foreach (var key in context.Keys)
            {
                foreach (var contentItem in inheritedContentItems)
                {
                    context.DocumentIndex.Set(key + ".Inherited", contentItem.ContentItemId, options);
                }
            }
        }