summaryrefslogtreecommitdiff
path: root/src/pages/sitemap
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/sitemap')
-rw-r--r--src/pages/sitemap/blogs.xml.js31
-rw-r--r--src/pages/sitemap/brands.xml.js31
-rw-r--r--src/pages/sitemap/categories.xml.js41
-rw-r--r--src/pages/sitemap/products.xml.js5
-rw-r--r--src/pages/sitemap/products/[id].xml.js32
-rw-r--r--src/pages/sitemap/products/[page].js35
6 files changed, 142 insertions, 33 deletions
diff --git a/src/pages/sitemap/blogs.xml.js b/src/pages/sitemap/blogs.xml.js
new file mode 100644
index 00000000..7f41ad0f
--- /dev/null
+++ b/src/pages/sitemap/blogs.xml.js
@@ -0,0 +1,31 @@
+import { createSlug } from '@/core/utils/slug'
+import blogsApi from '@/lib/blog/api/blogsApi'
+import { create } from 'xmlbuilder'
+
+export async function getServerSideProps({ res }) {
+ const baseUrl = process.env.SELF_HOST + '/blog/'
+ const blogs = await blogsApi({ limit: 0, offset: 0 })
+ const sitemap = create('urlset', { encoding: 'utf-8' }).att(
+ 'xmlns',
+ 'http://www.sitemaps.org/schemas/sitemap/0.9'
+ )
+
+ const date = new Date()
+ blogs.blogs.forEach((blog) => {
+ const url = sitemap.ele('url')
+ url.ele('loc', createSlug(baseUrl, blog.title, blog.id))
+ url.ele('lastmod', date.toISOString().slice(0, 10))
+ url.ele('changefreq', 'weekly')
+ url.ele('priority', '0.6')
+ })
+
+ res.setHeader('Content-Type', 'text/xml')
+ res.write(sitemap.end())
+ res.end()
+
+ return { props: {} }
+}
+
+export default function SitemapProducts() {
+ return null
+}
diff --git a/src/pages/sitemap/brands.xml.js b/src/pages/sitemap/brands.xml.js
new file mode 100644
index 00000000..c85c40e9
--- /dev/null
+++ b/src/pages/sitemap/brands.xml.js
@@ -0,0 +1,31 @@
+import { create } from 'xmlbuilder'
+import { createSlug } from '@/core/utils/slug'
+import odooApi from '@/core/api/odooApi'
+
+export async function getServerSideProps({ res }) {
+ const baseUrl = process.env.SELF_HOST + '/shop/brands/'
+ const brands = await odooApi('GET', `/api/v1/manufacture?limit=0`)
+ const sitemap = create('urlset', { encoding: 'utf-8' }).att(
+ 'xmlns',
+ 'http://www.sitemaps.org/schemas/sitemap/0.9'
+ )
+
+ const date = new Date()
+ brands.manufactures.forEach((brand) => {
+ const url = sitemap.ele('url')
+ url.ele('loc', createSlug(baseUrl, brand.name, brand.id))
+ url.ele('lastmod', date.toISOString().slice(0, 10))
+ url.ele('changefreq', 'weekly')
+ url.ele('priority', '0.6')
+ })
+
+ res.setHeader('Content-Type', 'text/xml')
+ res.write(sitemap.end())
+ res.end()
+
+ return { props: {} }
+}
+
+export default function SitemapProducts() {
+ return null
+}
diff --git a/src/pages/sitemap/categories.xml.js b/src/pages/sitemap/categories.xml.js
new file mode 100644
index 00000000..1c684576
--- /dev/null
+++ b/src/pages/sitemap/categories.xml.js
@@ -0,0 +1,41 @@
+import { create } from 'xmlbuilder'
+import { createSlug } from '@/core/utils/slug'
+import odooApi from '@/core/api/odooApi'
+
+export async function getServerSideProps({ res }) {
+ const categories = await odooApi('GET', '/api/v1/category/tree')
+ const sitemap = create('urlset', { encoding: 'utf-8' }).att(
+ 'xmlns',
+ 'http://www.sitemaps.org/schemas/sitemap/0.9'
+ )
+
+ categories.forEach((category) => {
+ addUrlToSitemap(sitemap, category.name, category.id)
+ category.childs.forEach((child1Category) => {
+ addUrlToSitemap(sitemap, child1Category.name, child1Category.id)
+ child1Category.childs.forEach((child2Category) => {
+ addUrlToSitemap(sitemap, child2Category.name, child2Category.id)
+ })
+ })
+ })
+
+ res.setHeader('Content-Type', 'text/xml')
+ res.write(sitemap.end())
+ res.end()
+
+ return { props: {} }
+}
+
+function addUrlToSitemap(sitemap, name, id) {
+ const baseUrl = process.env.SELF_HOST + '/shop/category/'
+ const date = new Date()
+ const url = sitemap.ele('url')
+ url.ele('loc', createSlug(baseUrl, name, id))
+ url.ele('lastmod', date.toISOString().slice(0, 10))
+ url.ele('changefreq', 'weekly')
+ url.ele('priority', '0.6')
+}
+
+export default function SitemapProducts() {
+ return null
+}
diff --git a/src/pages/sitemap/products.xml.js b/src/pages/sitemap/products.xml.js
index e5fc8029..a2067308 100644
--- a/src/pages/sitemap/products.xml.js
+++ b/src/pages/sitemap/products.xml.js
@@ -9,7 +9,10 @@ export async function getServerSideProps({ res }) {
const products = await productSearchApi({ query: _.toQuery(query) })
const pageCount = Math.ceil(products.response.numFound / limit)
const pages = Array.from({ length: pageCount }, (_, i) => i + 1)
- const sitemapIndex = create('sitemapindex', { encoding: 'UTF-8' })
+ const sitemapIndex = create('sitemapindex', { encoding: 'UTF-8' }).att(
+ 'xmlns',
+ 'http://www.sitemaps.org/schemas/sitemap/0.9'
+ )
const date = new Date()
pages.forEach((page) => {
diff --git a/src/pages/sitemap/products/[id].xml.js b/src/pages/sitemap/products/[id].xml.js
deleted file mode 100644
index 98c2bf40..00000000
--- a/src/pages/sitemap/products/[id].xml.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import productSearchApi from '@/lib/product/api/productSearchApi'
-import { create } from 'xmlbuilder'
-import _ from 'lodash-contrib'
-import { createSlug } from '@/core/utils/slug'
-
-export async function getServerSideProps({ res }) {
- const baseUrl = process.env.SELF_HOST + '/shop/product'
- const limit = 2500
- const query = { limit }
- const products = await productSearchApi({ query: _.toQuery(query) })
- console.log(products)
- // const sitemap = create('urlset', { encoding: 'UTF-8' })
-
- // const date = new Date()
- // pages.forEach((page) => {
- // const url = sitemap.ele('url')
- // url.ele('loc', createSlug(baseUrl, '', ''))
- // url.ele('lastmod', date.toISOString().slice(0, 10))
- // url.ele('changefreq', 'weekly')
- // url.ele('priority', '0.8')
- // })
-
- // res.setHeader('Content-Type', 'text/xml')
- // res.write(sitemap.end())
- // res.end()
-
- return { props: {} }
-}
-
-export default function SitemapProducts() {
- return <></>
-}
diff --git a/src/pages/sitemap/products/[page].js b/src/pages/sitemap/products/[page].js
new file mode 100644
index 00000000..2f9c3198
--- /dev/null
+++ b/src/pages/sitemap/products/[page].js
@@ -0,0 +1,35 @@
+import productSearchApi from '@/lib/product/api/productSearchApi'
+import { create } from 'xmlbuilder'
+import _ from 'lodash-contrib'
+import { createSlug } from '@/core/utils/slug'
+
+export async function getServerSideProps({ query, res }) {
+ const baseUrl = process.env.SELF_HOST + '/shop/product/'
+ const { page } = query
+ const limit = 2500
+ const queries = { limit, page: page.replace('.xml', '') }
+ const products = await productSearchApi({ query: _.toQuery(queries) })
+ const sitemap = create('urlset', { encoding: 'utf-8' }).att(
+ 'xmlns',
+ 'http://www.sitemaps.org/schemas/sitemap/0.9'
+ )
+
+ const date = new Date()
+ products.response.products.forEach((product) => {
+ const url = sitemap.ele('url')
+ url.ele('loc', createSlug(baseUrl, product.name, product.id))
+ url.ele('lastmod', date.toISOString().slice(0, 10))
+ url.ele('changefreq', 'weekly')
+ url.ele('priority', '0.8')
+ })
+
+ res.setHeader('Content-Type', 'text/xml')
+ res.write(sitemap.end())
+ res.end()
+
+ return { props: {} }
+}
+
+export default function SitemapProducts() {
+ return null
+}