diff --git a/components/CommonHead.js b/components/CommonHead.js
index f4f9a772..32b71fad 100644
--- a/components/CommonHead.js
+++ b/components/CommonHead.js
@@ -42,15 +42,6 @@ const CommonHead = ({ meta, children }) => {
- {/* 预加载字体 */}
- {BLOG.FONT_AWESOME && <>
-
-
- >}
- {BLOG.FONT_URL?.map((fontUrl, index) => {
- return
- })}
-
{BLOG.COMMENT_WEBMENTION.ENABLE && (
<>
diff --git a/next.config.js b/next.config.js
index b97ad538..e6ef9935 100644
--- a/next.config.js
+++ b/next.config.js
@@ -98,6 +98,13 @@ module.exports = withBundleAnalyzer({
experimental: {
scrollRestoration: true
},
+ // exportPathMap: (defaultPathMap, { dev, dir, outDir, distDir, buildId }) => {
+ // const pathMap = { ...defaultPathMap }
+ // // 忽略/sitemap.xml页面的导出
+ // pathMap['/sitemap.xml'] = { page: false }
+
+ // return pathMap
+ // },
publicRuntimeConfig: { // 这里的配置既可以服务端获取到,也可以在浏览器端获取到
NODE_ENV_API: process.env.NODE_ENV_API || 'prod',
THEMES: themes
diff --git a/pages/[prefix]/[slug].js b/pages/[prefix]/[slug].js
new file mode 100644
index 00000000..65d025c1
--- /dev/null
+++ b/pages/[prefix]/[slug].js
@@ -0,0 +1,122 @@
+import BLOG from '@/blog.config'
+import { getPostBlocks } from '@/lib/notion'
+import { getGlobalData } from '@/lib/notion/getNotionData'
+import { idToUuid } from 'notion-utils'
+import { getNotion } from '@/lib/notion/getNotion'
+import Slug from '.'
+
+/**
+ * 根据notion的slug访问页面
+ * @param {*} props
+ * @returns
+ */
+const PrefixSlug = props => {
+ return
+}
+
+export async function getStaticPaths() {
+ if (!BLOG.isProd) {
+ return {
+ paths: [],
+ fallback: true
+ }
+ }
+
+ const from = 'slug-paths'
+ const { allPages } = await getGlobalData({ from })
+ return {
+ paths: allPages?.filter(row => row.slug.indexOf('/') > 0).map(row => ({ params: { prefix: row.slug.split('/')[0], slug: row.slug.split('/')[1] } })),
+ fallback: true
+ }
+}
+
+export async function getStaticProps({ params: { prefix, slug } }) {
+ let fullSlug = prefix + '/' + slug
+ if (JSON.parse(BLOG.PSEUDO_STATIC)) {
+ if (!fullSlug.endsWith('.html')) {
+ fullSlug += '.html'
+ }
+ }
+ const from = `slug-props-${fullSlug}`
+ const props = await getGlobalData({ from })
+ // 在列表内查找文章
+ props.post = props?.allPages?.find((p) => {
+ return p.slug === fullSlug || p.id === idToUuid(fullSlug)
+ })
+
+ // 处理非列表内文章的内信息
+ if (!props?.post) {
+ const pageId = slug.slice(-1)[0]
+ if (pageId.length >= 32) {
+ const post = await getNotion(pageId)
+ props.post = post
+ }
+ }
+
+ // 无法获取文章
+ if (!props?.post) {
+ props.post = null
+ return { props, revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND) }
+ }
+
+ // 文章内容加载
+ if (!props?.posts?.blockMap) {
+ props.post.blockMap = await getPostBlocks(props.post.id, from)
+ }
+
+ // 推荐关联文章处理
+ const allPosts = props.allPages.filter(page => page.type === 'Post' && page.status === 'Published')
+ if (allPosts && allPosts.length > 0) {
+ const index = allPosts.indexOf(props.post)
+ props.prev = allPosts.slice(index - 1, index)[0] ?? allPosts.slice(-1)[0]
+ props.next = allPosts.slice(index + 1, index + 2)[0] ?? allPosts[0]
+ props.recommendPosts = getRecommendPost(props.post, allPosts, BLOG.POST_RECOMMEND_COUNT)
+ } else {
+ props.prev = null
+ props.next = null
+ props.recommendPosts = []
+ }
+
+ delete props.allPages
+ return {
+ props,
+ revalidate: parseInt(BLOG.NEXT_REVALIDATE_SECOND)
+ }
+}
+
+/**
+ * 获取文章的关联推荐文章列表,目前根据标签关联性筛选
+ * @param post
+ * @param {*} allPosts
+ * @param {*} count
+ * @returns
+ */
+function getRecommendPost(post, allPosts, count = 6) {
+ let recommendPosts = []
+ const postIds = []
+ const currentTags = post?.tags || []
+ for (let i = 0; i < allPosts.length; i++) {
+ const p = allPosts[i]
+ if (p.id === post.id || p.type.indexOf('Post') < 0) {
+ continue
+ }
+
+ for (let j = 0; j < currentTags.length; j++) {
+ const t = currentTags[j]
+ if (postIds.indexOf(p.id) > -1) {
+ continue
+ }
+ if (p.tags && p.tags.indexOf(t) > -1) {
+ recommendPosts.push(p)
+ postIds.push(p.id)
+ }
+ }
+ }
+
+ if (recommendPosts.length > count) {
+ recommendPosts = recommendPosts.slice(0, count)
+ }
+ return recommendPosts
+}
+
+export default PrefixSlug
diff --git a/pages/[...slug].js b/pages/[prefix]/index.js
similarity index 94%
rename from pages/[...slug].js
rename to pages/[prefix]/index.js
index 1523c674..788cee7d 100644
--- a/pages/[...slug].js
+++ b/pages/[prefix]/index.js
@@ -89,13 +89,14 @@ export async function getStaticPaths() {
const from = 'slug-paths'
const { allPages } = await getGlobalData({ from })
return {
- paths: allPages?.map(row => ({ params: { slug: [row.slug] } })),
+ paths: allPages?.filter(row => row.slug.indexOf('/') < 0).map(row => ({ params: { prefix: row.slug } })),
fallback: true
}
}
-export async function getStaticProps({ params: { slug } }) {
- let fullSlug = slug.join('/')
+export async function getStaticProps({ params: { prefix } }) {
+ // let fullSlug = slug.join('/')
+ let fullSlug = prefix
if (JSON.parse(BLOG.PSEUDO_STATIC)) {
if (!fullSlug.endsWith('.html')) {
fullSlug += '.html'
@@ -110,7 +111,7 @@ export async function getStaticProps({ params: { slug } }) {
// 处理非列表内文章的内信息
if (!props?.post) {
- const pageId = slug.slice(-1)[0]
+ const pageId = prefix.slice(-1)[0]
if (pageId.length >= 32) {
const post = await getNotion(pageId)
props.post = post
diff --git a/pages/_document.js b/pages/_document.js
index bee5073a..ec4f5335 100644
--- a/pages/_document.js
+++ b/pages/_document.js
@@ -13,8 +13,16 @@ class MyDocument extends Document {
return (
-
+
+ {/* 预加载字体 */}
+ {BLOG.FONT_AWESOME && <>
+
+
+ >}
+ {BLOG.FONT_URL?.map((fontUrl, index) => {
+ return
+ })}