Try our conversational search powered by Generative AI!

Simon J Ovens
Feb 18, 2017
  4420
(0 votes)

How to get the current page's category from a block and use Find to search for all pages that match the category.

In my application I created a block that showed all related pages based on the parent pages category. 
To achieve this I created a new category field called Location, the idea behind this field is to only select one location per page hence the call below to get the First() location. You could use .In() if you required to match against multiple.
In the block controllers ActionResult() method I get the parent page object by using the ServiceLocator.Current.GetInstance<IPageRouteHelper>() .  
In the search query you can see that I first Filter() on the Location category field and call Match() to get the pages that match the parent page's Location.
I then use Filter() and Match() to exclude the parent page from the results based on the ContentGUID.  

Note: The code below has no exception handling for blog readability so this would need to be added in a real world application.

    public class RelatedHomesBlockController : BlockController<RelatedHomesBlock>
    {
        private readonly IPageRouteHelper _pageRouteHelper;
        public IClient FindServiceClient { get; private set; }

        public RelatedHomesBlockController(IClient client)
        {
            FindServiceClient = client;
            _pageRouteHelper = ServiceLocator.Current.GetInstance<IPageRouteHelper>();
        }

        public override ActionResult Index(RelatedHomesBlock currentBlock)
        {
            var currentPage = (_pageRouteHelper.Page as AccommodationPage);
            var currentPageCategory = currentPage.Location.First();
            var contentResult = FindServiceClient.Search<AccommodationPage>()
                                .Filter(h => h.Location.Match(currentPageCategory))
                                .Filter(h => !h.ContentGuid.Match(currentPage.ContentGuid))
                                .GetContentResult();
            var model = new RelatedHomesBlockModel
            {
                Heading = currentBlock.Heading,
                ContentResult = contentResult
            };

            return PartialView(model);
        }
    }
Feb 18, 2017

Comments

Please login to comment.
Latest blogs
Join the Content Recommendations Work Smarter webinar May 8th 16.00-16.45 CET with expert Aidan Swain

Learn more about Content Recommendations, with Optimizely’s very own Senior Solutions consultant, Aidan Swain . He will discuss best practices and...

Karen McDougall | Apr 12, 2024

Plugin for Identifying and Bulk Deleting Orphaned Missing Properties in Optimizely

I am aware that the Optimizely World community has extensively discussed this topic, with numerous solutions and code snippets available to help...

Adnan Zameer | Apr 11, 2024 | Syndicated blog

Enhancing the Authoring Experience: Extending the LinkItem

The LinkItem field is one of the most demanded properties by the community, allowing editors to effortlessly create and manage links across pages a...

Santiago Morla | Apr 10, 2024 | Syndicated blog

The distinctions between Optimizely Web Experimentation and Optimizely Feature Experimentation

This blog is part of the series - Unlocking the Power of Experimentation: A Marketer's Insight. Let’s dive into Optimizely's powerful experimentati...

Holly Quilter | Apr 9, 2024