feat: closes #13968, add sitemap cache duration

This commit is contained in:
Barış Soner Uşaklı
2026-02-10 10:37:02 -05:00
parent 4aac656248
commit fe35ad4f47
4 changed files with 17 additions and 6 deletions

View File

@@ -142,6 +142,7 @@
"feeds:disableSitemap": 0,
"feeds:disableRSS": 0,
"sitemapTopics": 500,
"sitemapCacheDurationHours": 24,
"maintenanceMode": 0,
"maintenanceModeStatus": 503,
"upvoteVisibility": "all",

View File

@@ -5,6 +5,7 @@
"disable-rss-feeds": "Disable RSS Feeds",
"disable-sitemap-xml": "Disable Sitemap.xml",
"sitemap-topics": "Number of Topics to display in the Sitemap",
"sitemap-cache-duration-hours": "Sitemap Cache Duration (hours)",
"clear-sitemap-cache": "Clear Sitemap Cache",
"view-sitemap": "View Sitemap"
}

View File

@@ -60,6 +60,10 @@ async function getSitemapPages() {
return data.urls;
}
function getCacheExpireTimestamp() {
return Date.now() + (1000 * 60 * 60 * (meta.config.sitemapCacheDurationHours || 24));
}
sitemap.getPages = async function () {
if (sitemap.maps.pages && Date.now() < sitemap.maps.pagesCacheExpireTimestamp) {
return sitemap.maps.pages;
@@ -68,12 +72,12 @@ sitemap.getPages = async function () {
const urls = await getSitemapPages();
if (!urls.length) {
sitemap.maps.pages = '';
sitemap.maps.pagesCacheExpireTimestamp = Date.now() + (1000 * 60 * 60 * 24);
sitemap.maps.pagesCacheExpireTimestamp = getCacheExpireTimestamp();
return sitemap.maps.pages;
}
sitemap.maps.pages = await urlsToSitemap(urls);
sitemap.maps.pagesCacheExpireTimestamp = Date.now() + (1000 * 60 * 60 * 24);
sitemap.maps.pagesCacheExpireTimestamp = getCacheExpireTimestamp();
return sitemap.maps.pages;
};
@@ -105,12 +109,12 @@ sitemap.getCategories = async function () {
if (!categoryUrls.length) {
sitemap.maps.categories = '';
sitemap.maps.categoriesCacheExpireTimestamp = Date.now() + (1000 * 60 * 60 * 24);
sitemap.maps.categoriesCacheExpireTimestamp = getCacheExpireTimestamp();
return sitemap.maps.categories;
}
sitemap.maps.categories = await urlsToSitemap(categoryUrls);
sitemap.maps.categoriesCacheExpireTimestamp = Date.now() + (1000 * 60 * 60 * 24);
sitemap.maps.categoriesCacheExpireTimestamp = getCacheExpireTimestamp();
return sitemap.maps.categories;
};
@@ -140,7 +144,7 @@ sitemap.getTopicPage = async function (page) {
if (!data.topics.length) {
sitemap.maps.topics[page - 1] = {
sm: '',
cacheExpireTimestamp: Date.now() + (1000 * 60 * 60 * 24),
cacheExpireTimestamp: getCacheExpireTimestamp(),
};
return sitemap.maps.topics[page - 1].sm;
}
@@ -158,7 +162,7 @@ sitemap.getTopicPage = async function (page) {
sitemap.maps.topics[page - 1] = {
sm: await urlsToSitemap(topicUrls),
cacheExpireTimestamp: Date.now() + (1000 * 60 * 60 * 24),
cacheExpireTimestamp: getCacheExpireTimestamp(),
};
return sitemap.maps.topics[page - 1].sm;

View File

@@ -30,6 +30,11 @@
<input id="sitemapTopics" class="form-control" type="text" data-field="sitemapTopics" />
</div>
<div class="mb-3">
<label class="form-label" for="sitemapCacheDurationHours">[[admin/settings/web-crawler:sitemap-cache-duration-hours]]</label>
<input id="sitemapCacheDurationHours" class="form-control" type="text" data-field="sitemapCacheDurationHours" />
</div>
<p>
<button id="clear-sitemap-cache" class="btn btn-sm btn-warning">[[admin/settings/web-crawler:clear-sitemap-cache]]</button>
<a href="{config.relative_path}/sitemap.xml" target="_blank" class="btn btn-sm btn-light">[[admin/settings/web-crawler:view-sitemap]]</a>