From d11659ee8509f1a5a0225bf3734bb4343ffa7474 Mon Sep 17 00:00:00 2001 From: Junru Date: Sun, 21 Aug 2022 10:35:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=A2=9E=E9=87=8F?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=A4=B1=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gatsby-node.js | 58 +++++++++----------- src/templates/components/docDirectoryMenu.js | 4 +- src/templates/components/docPageMenu.js | 5 +- src/templates/components/docToc.js | 5 +- src/templates/components/productVersion.js | 6 +- src/utils/version_config.js | 11 +++- 6 files changed, 49 insertions(+), 40 deletions(-) diff --git a/gatsby-node.js b/gatsby-node.js index 65545a1a..0aad5864 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -1,6 +1,6 @@ const path = require('path') const { remarkSyntaxDiagram } = require('./src/utils/remarkSyntaxDiagram') -const { allProductVersions } = require('./src/utils/version_config') +const { allProductVersions, convertVersionName } = require('./src/utils/version_config') // 获取已上线产品 const allProductKeys = Object.keys(allProductVersions).filter(product => allProductVersions[product]) @@ -13,6 +13,7 @@ exports.onCreateNode = ({ node, actions, getNode }) => { const lang = relativePath.split('/')[0] const docType = relativePath.split('/')[1].substring(5, relativePath.split('/')[1].length) const version = relativePath.split('/')[2] + const urlVersion = convertVersionName(docType, relativePath.split('/')[2]) const fileName = relativePath.substr(relativePath.lastIndexOf('/') + 1, relativePath.length).replace('.md', '') createNodeField({ @@ -25,7 +26,7 @@ exports.onCreateNode = ({ node, actions, getNode }) => { createNodeField({ node, name: 'slug', - value: `/${lang}/${docType}/${version}/${fileName}`, + value: `/${lang}/${docType}/${urlVersion}/${fileName}`, }) // 文件语言,如en @@ -97,6 +98,7 @@ exports.createPages = async ({ graphql, actions }) => { const allDocsNodes = docs.data.allMarkdownRemark.nodes allDocsNodes.forEach((node) => { const { slug, lang, version, docType, fileName, relativePath } = node.fields + const urlVersion = convertVersionName(docType, version) // 处理语法树 const domStr = node.rawMarkdownBody @@ -112,69 +114,59 @@ exports.createPages = async ({ graphql, actions }) => { diagramTree.push(remarkSyntaxDiagram(codeNode, slug)) }) } - + createPage({ path: slug, component: path.resolve('./src/templates/doc.js'), context: { - tocPath: `/${lang}/${docType}/${version}/toc`, + tocPath: `/${lang}/${docType}/${urlVersion}/toc`, slug, lang, version, docType, fileName, relativePath, diagramTree } }) - // 判断是否为最新版本,如果是创建最新版本URL - const pLatestVersion = allProductVersions[docType].latestVersion - if ( pLatestVersion === version ) { - createPageRedirect(`/${lang}/${docType}/latest/${fileName}`, `/${lang}/${docType}/${pLatestVersion}/${fileName}`) - } - // 处理中文版本存在,英文版本不存在的情况,创建中文页面 if (lang === 'zh') { - const enPath = `/en/${docType}/${version}/${fileName}` + const enPath = `/en/${docType}/${urlVersion}/${fileName}` const isExits = allDocsNodes.find(item => item.fields.slug === enPath) if (!isExits) { createPage({ path: enPath, component: path.resolve('./src/templates/doc.js'), context: { - tocPath: `/en/${docType}/${version}/toc`, + tocPath: `/en/${docType}/${urlVersion}/toc`, slug, lang: 'en', realSlug: enPath, version, docType, fileName, relativePath, diagramTree } }) - // 同时创建最新版本URL - if ( pLatestVersion === version ) { - createPageRedirect(`/en/${docType}/latest/${fileName}`, enPath) - } } } }) // 创建首页面重定向 ,/ /zh /en 等URL,重定向到mogdb产品最新版本的首页 - const mogdbLatestVersion = allProductVersions.mogdb.latestVersion - createPageRedirect(`/zh`, `/zh/mogdb/${mogdbLatestVersion}/overview`) - createPageRedirect(`/zh/`, `/zh/mogdb/${mogdbLatestVersion}/overview`) - createPageRedirect(`/zh/mogdb/latest`, `/zh/mogdb/${mogdbLatestVersion}/overview`) - createPageRedirect(`/en`, `/en/mogdb/${mogdbLatestVersion}/overview`) - createPageRedirect(`/en/`, `/en/mogdb/${mogdbLatestVersion}/overview`) - createPageRedirect(`/en/mogdb/latest`, `/en/mogdb/${mogdbLatestVersion}/overview`) + createPageRedirect(`/zh`, `/zh/mogdb/latest/overview`) + createPageRedirect(`/zh/`, `/zh/mogdb/latest/overview`) + createPageRedirect(`/zh/mogdb/latest`, `/zh/mogdb/latest/overview`) + createPageRedirect(`/en`, `/en/mogdb/latest/overview`) + createPageRedirect(`/en/`, `/en/mogdb/latest/overview`) + createPageRedirect(`/en/mogdb/latest`, `/en/mogdb/latest/overview`) // 创建版本首页重定向 如:/zh/mogdb 重定向到最新版本的首页 allProductKeys.forEach(p => { - const { latestVersion, versions } = allProductVersions[p] - createPageRedirect(`/zh/${p}`, `/zh/${p}/${latestVersion}/overview`) - createPageRedirect(`/en/${p}`, `/en/${p}/${latestVersion}/overview`) - createPageRedirect(`/zh/${p}/`, `/zh/${p}/${latestVersion}/overview`) - createPageRedirect(`/en/${p}/`, `/en/${p}/${latestVersion}/overview`) + const { versions } = allProductVersions[p] + createPageRedirect(`/zh/${p}`, `/zh/${p}/latest/overview`) + createPageRedirect(`/en/${p}`, `/en/${p}/latest/overview`) + createPageRedirect(`/zh/${p}/`, `/zh/${p}/latest/overview`) + createPageRedirect(`/en/${p}/`, `/en/${p}/latest/overview`) const productAllVersions = Object.keys(versions).filter(v => !versions[v].disabled) productAllVersions.forEach(v => { - createPageRedirect(`/zh/${p}/${v}`, `/zh/${p}/${v}/overview`) - createPageRedirect(`/en/${p}/${v}`, `/en/${p}/${v}/overview`) - createPageRedirect(`/zh/${p}/${v}/`, `/zh/${p}/${v}/overview`) - createPageRedirect(`/en/${p}/${v}/`, `/en/${p}/${v}/overview`) + const urlVersion = convertVersionName(p, v) + createPageRedirect(`/zh/${p}/${v}`, `/zh/${p}/${urlVersion}/overview`) + createPageRedirect(`/en/${p}/${v}`, `/en/${p}/${urlVersion}/overview`) + createPageRedirect(`/zh/${p}/${v}/`, `/zh/${p}/${urlVersion}/overview`) + createPageRedirect(`/en/${p}/${v}/`, `/en/${p}/${urlVersion}/overview`) }) }) -} \ No newline at end of file +} diff --git a/src/templates/components/docDirectoryMenu.js b/src/templates/components/docDirectoryMenu.js index d7a89cc1..209f7739 100644 --- a/src/templates/components/docDirectoryMenu.js +++ b/src/templates/components/docDirectoryMenu.js @@ -5,7 +5,7 @@ import { FormattedMessage } from 'react-intl' // 文档目录菜单 const DocDirectoryMenu = ({ tableOfContents, pageContext }) => { - const { lang, slug, relativePath, realSlug } = pageContext + const { slug, relativePath, realSlug } = pageContext const docMenu = tableOfContents.replace(/\/#/g, '#') const [scrollTop, setScrollTop] = useState(0) const issueHref = `https://gitee.com/enmotech/mogdb-docs/issues/new?&description=原始文件:[/${relativePath}](https://docs.mogdb.io${realSlug || slug})` @@ -70,4 +70,4 @@ const DocDirectoryMenu = ({ tableOfContents, pageContext }) => { ) } -export default DocDirectoryMenu +export default DocDirectoryMenu \ No newline at end of file diff --git a/src/templates/components/docPageMenu.js b/src/templates/components/docPageMenu.js index fa41140c..713828bc 100644 --- a/src/templates/components/docPageMenu.js +++ b/src/templates/components/docPageMenu.js @@ -1,8 +1,10 @@ import * as React from "react" +import { convertVersionName } from '../../utils/version_config' // 文档底部上一页下一页切换菜单 const DocPageMenu = ({ tocNodes, pageContext }) => { const { lang, version, docType, realSlug, slug } = pageContext || {} + const urlVersion = convertVersionName(docType, version) const pageMenuArr = [] @@ -11,7 +13,7 @@ const DocPageMenu = ({ tocNodes, pageContext }) => { tocList.push(name) }) - const urlPrefix = `/${lang}/${docType}/${version}/` + const urlPrefix = `/${lang}/${docType}/${urlVersion}/` const pageSlug = realSlug || slug const activeIdx = tocList.findIndex(i => urlPrefix + i === pageSlug) @@ -47,3 +49,4 @@ const DocPageMenu = ({ tocNodes, pageContext }) => { ) } export default DocPageMenu + diff --git a/src/templates/components/docToc.js b/src/templates/components/docToc.js index 00a16d4b..19b9e070 100644 --- a/src/templates/components/docToc.js +++ b/src/templates/components/docToc.js @@ -4,13 +4,15 @@ import '../../styles/components/toc.scss' import React, { useRef, useLayoutEffect } from "react" import { remark } from 'remark' import html from './remark-html' +import { convertVersionName } from '../../utils/version_config' // 版本切换 const DocToc = (props) => { const { tocNodes, pageContext } = props; const { lang, version, docType, slug, realSlug } = pageContext + const urlVersion = convertVersionName(docType, version) const tocRef = useRef(null) - const tocLinkPrefix = `/${lang}/${docType}/${version}/` + const tocLinkPrefix = `/${lang}/${docType}/${urlVersion}/` const _html = remark() .use(html, { sanitize: true, tocLinkPrefix, slug: realSlug || slug }) .processSync(tocNodes) @@ -64,3 +66,4 @@ const DocToc = (props) => { ) } export default DocToc + diff --git a/src/templates/components/productVersion.js b/src/templates/components/productVersion.js index a8562b14..2a7487c6 100644 --- a/src/templates/components/productVersion.js +++ b/src/templates/components/productVersion.js @@ -7,7 +7,9 @@ const { Option } = Select // 版本切换 const ProductVersion = ({ pageContext }) => { - const { lang, version, docType } = pageContext || {} + const { lang, version: urlVersion, docType } = pageContext || {} + const latestVersion = allProductVersions[docType].latestVersion + const version = urlVersion === 'latest' ? latestVersion : urlVersion let productVersions = (allProductVersions[docType] || {}).versions productVersions = Object.values(productVersions).filter(v => !v.disabled) @@ -23,4 +25,4 @@ const ProductVersion = ({ pageContext }) => { ) } -export default ProductVersion +export default ProductVersion \ No newline at end of file diff --git a/src/utils/version_config.js b/src/utils/version_config.js index 5ad9a894..9a78b541 100644 --- a/src/utils/version_config.js +++ b/src/utils/version_config.js @@ -135,6 +135,15 @@ const allProductVersions = { } } +// 获取产品URL中的版本 +const convertVersionName = (product, version) => { + const latestVersion = allProductVersions[product].latestVersion + if (version === latestVersion) return 'latest' + return version +} + module.exports = { - allProductVersions + allProductVersions, + convertVersionName } + -- Gitee From 723939936fc34fff1560d21eb1571d36932c73aa Mon Sep 17 00:00:00 2001 From: Junru Date: Mon, 22 Aug 2022 15:56:49 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E7=89=88=E6=9C=AC=EF=BC=8C=E7=89=88=E6=9C=AC=E5=8F=B7URL?= =?UTF-8?q?=E9=87=8D=E5=AE=9A=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gatsby-node.js | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/gatsby-node.js b/gatsby-node.js index 0aad5864..e2eebfaa 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -13,7 +13,7 @@ exports.onCreateNode = ({ node, actions, getNode }) => { const lang = relativePath.split('/')[0] const docType = relativePath.split('/')[1].substring(5, relativePath.split('/')[1].length) const version = relativePath.split('/')[2] - const urlVersion = convertVersionName(docType, relativePath.split('/')[2]) + const urlVersion = convertVersionName(docType, version) const fileName = relativePath.substr(relativePath.lastIndexOf('/') + 1, relativePath.length).replace('.md', '') createNodeField({ @@ -142,31 +142,29 @@ exports.createPages = async ({ graphql, actions }) => { }) } } + + // 重定向最新版本URL + const latestVersion = allProductVersions[docType].latestVersion + if (urlVersion === 'latest') { + createPageRedirect(`/${lang}/${docType}/${latestVersion}/${fileName}`, slug) + } }) // 创建首页面重定向 ,/ /zh /en 等URL,重定向到mogdb产品最新版本的首页 - createPageRedirect(`/zh`, `/zh/mogdb/latest/overview`) - createPageRedirect(`/zh/`, `/zh/mogdb/latest/overview`) - createPageRedirect(`/zh/mogdb/latest`, `/zh/mogdb/latest/overview`) - createPageRedirect(`/en`, `/en/mogdb/latest/overview`) - createPageRedirect(`/en/`, `/en/mogdb/latest/overview`) - createPageRedirect(`/en/mogdb/latest`, `/en/mogdb/latest/overview`) + createPageRedirect(`/zh/`, `/zh/mtk/latest/overview`) + createPageRedirect(`/en/`, `/en/mtk/latest/overview`) // 创建版本首页重定向 如:/zh/mogdb 重定向到最新版本的首页 allProductKeys.forEach(p => { const { versions } = allProductVersions[p] - createPageRedirect(`/zh/${p}`, `/zh/${p}/latest/overview`) - createPageRedirect(`/en/${p}`, `/en/${p}/latest/overview`) createPageRedirect(`/zh/${p}/`, `/zh/${p}/latest/overview`) createPageRedirect(`/en/${p}/`, `/en/${p}/latest/overview`) const productAllVersions = Object.keys(versions).filter(v => !versions[v].disabled) productAllVersions.forEach(v => { const urlVersion = convertVersionName(p, v) - createPageRedirect(`/zh/${p}/${v}`, `/zh/${p}/${urlVersion}/overview`) - createPageRedirect(`/en/${p}/${v}`, `/en/${p}/${urlVersion}/overview`) - createPageRedirect(`/zh/${p}/${v}/`, `/zh/${p}/${urlVersion}/overview`) - createPageRedirect(`/en/${p}/${v}/`, `/en/${p}/${urlVersion}/overview`) + createPageRedirect(`/zh/${p}/${urlVersion}/`, `/zh/${p}/${urlVersion}/overview`) + createPageRedirect(`/en/${p}/${urlVersion}/`, `/en/${p}/${urlVersion}/overview`) }) }) } -- Gitee