Implementing sitemaps for custom content types
Developers perform this task.
To generate sitemap entries for custom content types, ensure those types implement Directory.Item
, SiteMapItem
, and optionally SiteMapConfig
.
Step 1: Implement SiteMapItem
For a custom content type to be included in a sitemap, it must:
Extend Content.
Implement the method SiteMapItem#getSiteMapEntries. This method returns a list of SiteMapEntry objects. A
SiteMapEntry
object provides a URL and other information about an asset. The resulting sitemap XML for an asset is determined by theSiteMapEntry
methods that you set in the implementation.
The following example shows a getSiteMapEntries()
implementation.
public class MyContentType extends Content implements Directory.Item, /* Generates permalinks used in sitemaps. */ SiteMapItem { /* Generates a list of sitemap entries. */ @Override public List<SiteMapEntry> getSiteMapEntries() { List<SiteMapEntry> siteMapEntries = new ArrayList<>(); /* * Loop over all sites hosting this object. If the site * itself has a permalink, create a sitemap entry for the object. */ Site.Static.findAll().forEach(e -> { String sitePermalink = as(Directory.ObjectModification.class).getSitePermalink(e); if (!StringUtils.isBlank(sitePermalink)) { SiteMapEntry siteMapEntry = new SiteMapEntry(); siteMapEntry.setUpdateDate(getUpdateDate()); siteMapEntry.setPermalink(sitePermalink); siteMapEntries.add(siteMapEntry); } }); /* Return the list of sitemap entries associated with this object. */ return siteMapEntries; } }
For content types that you want to include in the news- or video-sitemap, implement the NewsSiteMapItem
or VideoSiteMapItem
interface.
Step 2 (optional): Implement SiteMapConfig
Sitemap configuration informs the background tasks about the types of sitemaps to generate and when to generate them. Brightspot provides a default sitemap configuration that accommodates any custom content types that you add; however, if you want a custom sitemap configuration, you must implement SiteMapConfig and related interfaces.
The SiteMapConfig
is a subinterface of GlobalSiteMapConfig, which includes the getJobSettings()
method. Implementing this method requires that you implement the JobSettings interface.
The following snippet shows a partial implementation of SiteMapConfig
.
public class MySiteMapConfig implements SiteMapConfig { @Override public JobSettings getJobSettings() { return new JobSettings() { /* * Check for correct host. As a best practice, implement this method to call * TaskUtils.isRunningOnTaskHost(). Doing so verifies that the host on which * the sitemap generation task will run is the host configured in * Admin > Sites & Settings > Global > Debug > Default Task Host. */ @Override public boolean isAllowedToRun() { return TaskUtils.isRunningOnTaskHost(); } /* Time to run task. */ @Override public DateTime calculateRunTime(DateTime currentTime) { return currentTime.property(DateTimeFieldType.dayOfMonth()).roundFloorCopy(); } /* Job identification in log. */ @Override public String getLabel() { return "Sitemap Settings"; } }; } /* Additionally implemented SiteMapConfig and GlobalSiteMapConfig methods */ }