首页 > 解决方案 > 根据 Nuxt 中的棱镜数据生成站点地图

问题描述

我猜你们中的一些人在为您的项目生成站点地图方面有一些经验。我有一个 Nuxt ( SSR full static ) 项目。我正在使用@nuxtjs/prismic@nuxtjs/sitemap 模块

站点地图模块不生成动态页面,因此我们需要异步检索网站上的所有页面,并将数据处理成站点地图模块所需的格式。

我猜我需要编写一些构建模块,在那里我可以访问 prismic,然后生成并编写所需的数据格式。

请帮助我了解如何从模块级别导入或访问棱镜,以便我可以编写所需的逻辑。

更新 我创建了构建模块并将其注册在 nuxt.config.js 中。成功从 prismic 查询中检索数据。在下面的代码中 在我的循环中,我将棱镜数据转换为站点地图模块所需的数据格式。

我将数据传递给站点地图模块this.nuxt。现在这段代码传递了正确的数据,但是模块覆盖了静态页面,剩下的唯一正确的数据是动态页面。看起来我需要禁用模块的自动生成,并且只能使用我的数据。

// ... all dynamic pages generated correctly
<url>
<loc>https://danica-dev.netlify.app/blog/arrival-of-ikea-in-ukraine</loc>
<lastmod>2021-05-01T14:00:04.000Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.3</priority>
</url>
<url>
<loc>https://danica-dev.netlify.app/en</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/kontakt</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/privacy-policy</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/en/blog</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/en/contact</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/en/privacy-policy</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/en/projects</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru/blog</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru/kontakt</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru/privacy-policy</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru/projects</loc>
</url>

// modules/sitemap.js
import prismic from '@prismicio/client'

const apiEndpoint = 'https://danica.cdn.prismic.io/api/v2'
const client = prismic.client(apiEndpoint)

export default async function Sitemap() {
    const data = await client.query('', { pageSize: 100 })
    const pages = []

    data.results.forEach((page) => {
        switch (page.type) {
            case 'blog_post':
                pages.push({
                    url: `blog/${page.uid}`,
                    changefreq: 'weekly',
                    priority: 0.25,
                    lastmod: page.last_publication_date,
                })
                break
            case 'project_post':
                pages.push({
                    url: `projects/${page.uid}`,
                    changefreq: 'monthly',
                    priority: 0.5,
                    lastmod: page.last_publication_date,
                })
                break
      //...
            default:
                break
        }
    })

    this.nuxt.options.sitemap.routes = pages
}

标签: modulenuxt.jssitemapprismic.io

解决方案


推荐阅读