From 9b9bdb2811c4c05b1af51750d258a28e15169095 Mon Sep 17 00:00:00 2001 From: radishzzz Date: Thu, 13 Mar 2025 01:21:19 +0000 Subject: [PATCH] fix: correctly correspond to the og of each article --- src/config.ts | 38 ++++++++++++++++++++++++------------ src/layouts/Head.astro | 22 +++++---------------- src/layouts/Layout.astro | 5 +++-- src/pages/og/[...route].ts | 2 +- src/pages/posts/[slug].astro | 1 + src/types/index.d.ts | 3 +++ 6 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/config.ts b/src/config.ts index 8932ec9..2a888ae 100644 --- a/src/config.ts +++ b/src/config.ts @@ -31,7 +31,8 @@ export const themeConfig: ThemeConfig = { // background color background: 'oklch(96% 0.005 298)', // code block theme - codeTheme: 'github-light', // available themes: https://shiki.style/themes + // available themes: https://shiki.style/themes + codeTheme: 'github-light', }, dark: { // title color @@ -41,7 +42,8 @@ export const themeConfig: ThemeConfig = { // background color background: 'oklch(22% 0.005 298)', // code block theme - codeTheme: 'github-dark', // available themes: https://shiki.style/themes + // available themes: https://shiki.style/themes + codeTheme: 'github-dark', }, }, // COLOR SETTINGS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> END @@ -52,7 +54,7 @@ export const themeConfig: ThemeConfig = { locale: 'zh', // zh, zh-tw, ja, en, es, ru // more languages // not fill in the locale above again - moreLocale: ['zh-tw', 'ja', 'en', 'es', 'ru'], // zh, zh-tw, ja, en, es, ru + moreLocale: ['zh-tw', 'ja', 'en', 'es', 'ru'], // ['zh', 'zh-tw', 'ja', 'en', 'es', 'ru'] // font styles for text fontStyle: 'sans', // sans, serif // date format for posts @@ -76,7 +78,8 @@ export const themeConfig: ThemeConfig = { // gif search search: false, // true, false // image uploader - imageUploader: false, // true, false (BUG:unable to hide image uploader icon) + // bug: unable to hide image uploader icon + imageUploader: false, // true, false }, // disqus: TODO // giscus: TODO @@ -91,26 +94,37 @@ export const themeConfig: ThemeConfig = { // site verification verification: { // Google Search Console - google: '', // https://search.google.com/search-console + // docs: https://search.google.com/search-console + google: '', // Bing Webmaster Tools - bing: '', // https://www.bing.com/webmasters + // docs: https://www.bing.com/webmasters + bing: '', // Yandex Webmaster - yandex: '', // https://webmaster.yandex.com + // docs: https://webmaster.yandex.com + yandex: '', // Baidu Search - baidu: '', // https://ziyuan.baidu.com + // docs: https://ziyuan.baidu.com + baidu: '', }, // Google Analytics - googleAnalyticsID: '', // https://analytics.google.com + // docs: https://analytics.google.com + googleAnalyticsID: '', // Umami Analytics - umamiAnalyticsID: '520af332-bfb7-4e7c-9386-5f273ee3d697', // https://cloud.umami.is + // docs: https://cloud.umami.is + umamiAnalyticsID: '520af332-bfb7-4e7c-9386-5f273ee3d697', // follow verification - // https://follow.is/ + // docs: https://follow.is/ follow: { // feed ID feedID: '', // user ID userID: '', }, + // Open Graph + openGraph: { + // image url (1200x630) + url: '', // https://placehold.co/1200x630 + }, }, // SEO SETTINGS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> END @@ -120,7 +134,7 @@ export const themeConfig: ThemeConfig = { links: [ { name: 'RSS', - url: '/rss.xml', // rss.xml or atom.xml + url: '/rss.xml', // rss.xml, atom.xml }, { name: 'GitHub', diff --git a/src/layouts/Head.astro b/src/layouts/Head.astro index 47b3229..0a79ff5 100644 --- a/src/layouts/Head.astro +++ b/src/layouts/Head.astro @@ -1,39 +1,27 @@ --- import themeConfig from '@/config' -import { isPostPage } from '@/utils/path' import { ClientRouter } from 'astro:transitions' interface Props { postTitle?: string postDescription?: string + postSlug?: string } -const { postTitle, postDescription } = Astro.props +const { postTitle, postDescription, postSlug } = Astro.props const { title, subtitle, description, author, url, favicon } = themeConfig.site const { mode, light: { background: lightMode }, dark: { background: darkMode } } = themeConfig.color const { locale, moreLocale } = themeConfig.global -const { verification = {}, twitterID = '', googleAnalyticsID = '', umamiAnalyticsID = '' } = themeConfig.seo ?? {} +// TODO: Change openGraph image fallback url +const { verification = {}, twitterID = '', googleAnalyticsID = '', umamiAnalyticsID = '', openGraph = 'https://placehold.co/1200x630' } = themeConfig.seo ?? {} const { google = '', bing = '', yandex = '', baidu = '' } = verification const { commentURL = '', imageHostURL = '', customGoogleAnalyticsJS = '', customUmamiAnalyticsJS = '' } = themeConfig.preload const initMetaTheme = mode === 'dark' ? darkMode : lightMode const pageTitle = postTitle ? `${postTitle} | ${title}` : `${title} - ${subtitle}` const pageDescription = postDescription || description - -// Determine the OG image for the page -// Check if the current page is a post -const currentPath = Astro.url.pathname -const isPost = isPostPage(currentPath) - -// Extract slug from URL as the post identifier -const pathParts = currentPath.split('/').filter(part => part !== '') -const slug = pathParts.length > 0 ? pathParts[pathParts.length - 1] : '' - -// Prioritize auto-generated OG image, otherwise use fallback OG image -const pageImage = isPost && slug - ? `${url}/og/${slug}.png` - : (favicon.startsWith('http') ? favicon : `${url}${favicon}`) +const pageImage = postSlug ? `${url}/og/${postSlug}.png` : `${openGraph}` --- diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 26be3bb..205d06a 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -18,9 +18,10 @@ import '@/styles/heti.css' interface Props { postTitle?: string postDescription?: string + postSlug?: string } -const { postTitle, postDescription } = Astro.props +const { postTitle, postDescription, postSlug } = Astro.props const { isHome, isPost } = getPagePath(Astro.url.pathname) const fontStyle = themeConfig.global.fontStyle === 'serif' ? 'font-serif' : 'font-sans' @@ -34,7 +35,7 @@ const footerMarginClass = isPost && themeConfig.comment?.waline?.serverURL class={fontStyle} data-overlayscrollbars-initialize > - +
[ - data.abbrlink || slug, // Prioritize using abbrlink instead of slug + slug, { title: data.title, description: data.description || '', diff --git a/src/pages/posts/[slug].astro b/src/pages/posts/[slug].astro index 71ee590..3155210 100644 --- a/src/pages/posts/[slug].astro +++ b/src/pages/posts/[slug].astro @@ -26,6 +26,7 @@ const { Content, remarkPluginFrontmatter } = await post.render()

diff --git a/src/types/index.d.ts b/src/types/index.d.ts index be0f62e..200a0f5 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -60,6 +60,9 @@ export interface ThemeConfig { feedID?: string userID?: string } + openGraph?: { + url?: string + } } footer: {