Login

How do I exclude pages and branches that should be hidden in search

Versions: n/a, FAQ number: 71, Old FAQ number: 937

Q: How do I exclude pages and branches that should be hidden in a search result?

A: Create a filter that removes unwanted pages from the search results. See example below.

// This code needs the following namespaces:
using System;
using EPiServer;
using EPiServer.Core;
using EPiServer.Filters;
using EPiServer.WebControls;

protected PageSearch       SearchResults;

/// <summary>
/// Check if the page and all its parent pages are visible in menus.
/// </summary>
/// <param name="page">Page to check</param>
/// <returns>
/// True if page belongs to a visible pagetree branch, otherwise false
/// </returns>
private bool PageHierarcyVisibleInMenus(PageData page)
{
  if (page == null || page.IsDeleted ||
      page.PageLink == PageReference.EmptyReference ||
      (bool)page["PageVisibleInMenu"] == false)
      return false;
  else if (page.ParentLink == PageReference.EmptyReference)
      return true;
  else
      return PageHierarcyVisibleInMenus(
                Global.EPDataFactory.GetPage(page.ParentLink));
}

private void FilterNonVisiblePages(object sender, FilterEventArgs e)
{
  PageDataCollection pages = e.Pages;

  for(int i = 0; i < pages.Count; i++)
  {
    if ( ! PageHierarcyVisibleInMenus(pages[i]) )
    {
       pages.RemoveAt(i);
       i--;
    }
  }  
}

private void Page_Load(object sender, System.EventArgs e)
{
  SearchResults.Filter  += new FilterEventHandler(FilterNonVisiblePages);

  DataBind();  

EPiTrace logger