Search for pages based on page type
Optimizely Content Management System (CMS) recommends Optimizely Search & Navigation, a cloud-ready extension that lets you build advanced customized search features based on your content model.
You can programmatically search for CMS pages for non-cloud environments based on a certain page type using built-in functionality. By specifying search criteria and a place to start the search, you get a PageDataCollection containing matching pages.
The DataFactory contains a method called FindPagesWithCriteria which takes a PageReference (representing where to start the search) and a PropertyCriteriaCollection object (representing what to search for). When the FindPagesWithCriteria method is called it returns a PageDataCollection object containing matching pages.
Create a criteria collection
- Create a PropertyCriteriaCollection object that contains the individual PropertyCriteria objects:
PropertyCriteriaCollection criterias = new PropertyCriteriaCollection();- Create a PropertyCriteria object that contains the information about the property criteria for the search:
Create search criteria
Define the search criteria by creating a PropertyCriteria object that contains the information about the property criteria for the search:
- Set the Condition property to specify the type of comparison you want; for example, CompareCondition.Equal.
- Set the Name property to the PageTypeID property.
- Set the Type property to the PageType property.
- Set the Value property to specify what page type to search for (the load of a page type is based on its name); for example, PageTypeNewsItem.
- Set the Required property to true. This criterion is required for a match.
PropertyCriteria criteria = new PropertyCriteria();
criteria.Condition = CompareCondition.Equal;
criteria.Name = "PageTypeID";
criteria.Type = PropertyDataType.PageType;
criteria.Value = Locate.ContentTypeRepository().Load("PageTypeNewsItem").ID.ToString();
criteria.Required = true;Create additional search criteria
Define another search criterion by creating a PropertyCriteria object that contains the information about the property criteria for the search:
- Set the Condition property to specify the type of comparison you want; for example, CompareCondition.GreaterThan.
PropertyCriteriaCollection criterias = new PropertyCriteriaCollection();- Set the Name property to the PageCreated property.
- Set the Type property to the Date property.
- Set the Value property to specify a period; for example, set to search for pages created in the last 120 days.
- Set the Required property to true, this criterion is required for a match.
PropertyCriteria secCriteria = new PropertyCriteria();
secCriteria.Condition = EPiServer.Filters.CompareCondition.GreaterThan;
secCriteria.Name = "PageCreated";
secCriteria.Type = PropertyDataType.Date;
secCriteria.Value = DateTime.Now.AddDays(-120).ToString();
secCriteria.Required = true;Add your criteria to the criteria collection
Add your specified criteria to the criteria collection as follows:
criterias.Add(criteria);
criterias.Add(secCriteria);Execute the search
After you specify the criteria, define where to start the search. Use the start page as the search starting point.
📘 Note The following example may return many matches (and in some cases could be time-consuming).
PageDataCollection _newsPageItems = Locate.PageCriteriaQueryService().FindPagesWithCriteria(PageReference.StartPage, criterias);FilterForVisitor
Filter for visitors. The following filter removes pages that the current user does not have access to or that are not currently published:
FilterForVisitor.Filter(_newsPageItems);
new FilterSort(FilterSortOrder.PublishedDescending).Filter(_newsPageItems);You can find the source code for the PageDataCollection and PageData classes the Framework Reference section under the Remarks section for the class.