user3877350
user3877350

Reputation: 5

Orchard Query For Page with Show on a menu checked

Hi I want to make a "Query" and put a filter for returning all pages that has "Show on a menu" checked. I did not find a way to do that.. Is it possible?

Upvotes: 0

Views: 195

Answers (1)

devqon
devqon

Reputation: 13997

Try something like this:

using Orchard.Localization;
using Orchard.Projections.Descriptors.Filter;
using Orchard.Navigation;
using IFilterProvider = Orchard.Projections.Services.IFilterProvider;

namespace MyProject.Filters
{
    public class MenuPartFilter : IFilterProvider {
        public Localizer T { get; set; }

        public ProductPartFilter() {
            T = NullLocalizer.Instance;
        }

        public void Describe(DescribeFilterContext describe)
        {
            describe.For(
                "Content",          // The category of this filter
                T("Content"),       // The name of the filter (not used in 1.4)
                T("Content"))       // The description of the filter (not used in 1.4)

                // Defines the actual filter (we could define multiple filters using the fluent syntax)
                .Element(
                    "MenuParts",     // Type of the element
                    T("Menu Parts"), // Name of the element
                    T("Menu parts"), // Description of the element
                    ApplyFilter,        // Delegate to a method that performs the actual filtering for this element
                    DisplayFilter       // Delegate to a method that returns a descriptive string for this element
                );
        }

        private void ApplyFilter(FilterContext context) {

            // Set the Query property of the context parameter to any IHqlQuery. In our case, we use a default query
            // and narrow it down by joining with the MenuPartRecord.
            context.Query = context.Query.Join(x => x.ContentPartRecord(typeof (MenuPartRecord)));
        }

        private LocalizedString DisplayFilter(FilterContext context) {
            return T("Content with MenuPart");
        }
    }
}

Upvotes: 1

Related Questions