1

我正在尝试在我的 Next.js 应用程序中使用 Prismic 来实现动态路由结构。本质上,我有一个页面,mysite.com/landing-page例如,我可以在我的[uid]模板中路由到它,{ uid } = params在我的getServerSideProps函数中使用。但是,我希望允许用户通过子目录访问同一页面,例如mysite.com/sacramento-ca/landing-page. 我所做的研究似乎表明我可以在我的 Prismic 存储库中创建一个内容关系,该关系指定也可以引用该页面的位置(sacramento-ca作为此处的示例),然后在我的查询中引用这些内容,并通过到页面模板。但是,我无法弄清楚如何实现这一点。

我的pages目录结构如下:

├── [uid]
│   └── index.tsx
├── index.tsx
├── products
│   └── [uid].tsx
├── projects
│   └── index.tsx
├── promos
│   ├── [id].tsx
│   └── index.tsx
└── sitemap
    └── index.tsx

..总体而言,这对于顶级页面来说效果很好。但是 1. 如何查询categoryingetServerSideProps以及如何命名和嵌套页面模板?我也阅读了这个问题/答案,这似乎是在正确的轨道上,但我不确定如何实现它。如果有帮助,这也是我的[uid]模板的代码。

import React from 'react';

import { SEO } from 'components/seo/SEO';
import { SliceZone } from 'components/slice-zone/SliceZone';

import { client, queryWithProducts } from '../../lib/prismic';

export const Page = ({ document }: any) => {
  const slices = document;
  if (!slices) return null;

  const { meta_title, meta_description, meta_keywords, social_image } = document;

  return (
    <>
      <SEO
        title={meta_title}
        description={meta_description}
        keywords={meta_keywords}
        banner={social_image.url}
      />
      <SliceZone slices={slices} />
    </>
  );
};

export default Page;

export const getServerSideProps = async ({ params, query }: any) => {
  console.log(query)
  const { uid } = params;
  const { data: document } = await client.getByUID('landing', uid, queryWithProducts);

  return {
    props: {
      document,
    },
  };
};
4

1 回答 1

1

你在正确的轨道上,你可以使用动态的包罗万象的路线

您需要将文件夹重命名为[...uid],这将params.uid返回和数组而不是字符串。

// [...uid]/index.tsx

export const getServerSideProps = async ({ params, query }: any) => {
    const { uid } = params; 
    // When navigating to /sacramento-ca/landing-page `uid` will 
    // be an array containing ['sacramento-ca', 'landing-page']

    // Add logic to retrieve data based on array values

    return {
        props: {
            document,
        },
    };
};
于 2021-01-14T11:20:02.390 回答