Multi-Site
This article describes how to filter for catalogs based on site.
When using multi site, you can create site specific catalogs. To filter for catalogs based on site you can use the following API:
//Using commerce search prvoider,
ServiceLocator.Current.GetInstance<SearchManager>().Search(new CatalogEntrySearchCriteria
{
CatalogNames = GetCatalogNames(),
});
private StringCollection GetCatalogNames()
{
var catalogNames = new StringCollection();
var ids = ServiceLocator.Current.GetInstance<ICatalogSystem>().GetCatalogsBySite(SiteDefinition.Current?.Id ?? Guid.Empty);
if (ids == null || !ids.Any())
{
return catalogNames;
}
var catalogs = _catalogSystem.GetCatalogDto().Catalog.Where(x => ids.Contains(x.CatalogId));
catalogNames.AddRange(catalogs.Select(x => x.Name).ToArray());
return catalogNames;
}
//Using Find
var query = ServiceLocator.Current.GetInstance<IClient>().Search<EntryContentBase>();
var ids = ServiceLocator.Current.GetInstance<ICatalogSystem>().GetCatalogsBySite(SiteDefinition.Current?.Id ?? Guid.Empty);
if (ids?.Any() ?? false)
{
query = query.Filter(x => x.CatalogId.In(ids));
}
var result = query.GetContentResult();
Updated 4 months ago