Search for pages based on page type
Describes how to 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 individualPropertyCriteria
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 thePageTypeID
property. - Set the
Type
property to thePageType
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 thePageCreated
property. -
Set the
Type
property to theDate
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.
Updated 6 months ago