Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
AI OnAI Off
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Interesting question! This is what I came up with:
public IEnumerable<T> GetAllBlocksOfTypeFromContentAreas<T>(PageData page) where T : BlockData
{
var results = new List<T>();
if (page == null) return results;
foreach (var property in page.Property)
{
var contentArea = property.Value as ContentArea;
if (contentArea == null)
continue;
foreach (var contentAreaItem in contentArea.Items)
{
T block;
if (_contentRepository.Service.TryGet(contentAreaItem.ContentLink, out block))
results.Add(block);
}
}
return results;
}
It does require you to load each piece of content from each ContentArea with the TryGet-call, so it might get a bit heavy performance wise if you have many content areas and many items in those content areas.
Edit: It was hard to name the method in a short and descriptive way. :P
Edit 2:
Depending on where you're doing this operation you might want personalization and access rights to be considered for picking which content you want to show a specific visitor.
In that case use:
foreach (var contentAreaItem in contentArea.FilteredItems)
instead of
foreach (var contentAreaItem in contentArea.Items)
Hi peeps!,
Problem:
I have a PageData object.
1. Look for specific block-type in contentarea, on whichever page (PageData) that may have {n} number of contentarea.
2. Parse block(s) from contentarea(s) to IEnumerable (if possible, else retrieve content reference)
Finally, use blocks to create my viewmodels.
Suggestions?
Br,
Jens D.