Implementing sitemaps for custom content types
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 .
- Implement the method . This method returns a list of 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 and related interfaces.
The SiteMapConfig
is a subinterface of , which includes the getJobSettings()
method. Implementing this method requires that you implement the 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 */
}