44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
// composables/usePageMeta.ts
|
|
import { useRoute } from 'vue-router'
|
|
import { useMainStore } from '~/stores/main'
|
|
import { useHead } from '@unhead/vue'
|
|
|
|
export function usePageMeta() {
|
|
const route = useRoute()
|
|
const pageLink = route.path
|
|
const mainStore = useMainStore()
|
|
|
|
const page = mainStore.getPageByLink(pageLink)
|
|
console.log(page)
|
|
|
|
if (!page) {
|
|
console.warn(`Keine Seite gefunden für den pageLink "${pageLink}"`)
|
|
return
|
|
}
|
|
|
|
const metaTitle = page.SEO?.pageTitle || 'Standard Title'
|
|
const metaDescription = page.SEO?.seoDescription || 'Standard Description'
|
|
const metaImage = page.SEO?.seoImage?.url || '/default-image.jpg'
|
|
|
|
try {
|
|
JSON.stringify(metaTitle)
|
|
JSON.stringify(metaDescription)
|
|
JSON.stringify(metaImage)
|
|
} catch (err) {
|
|
console.error('Fehler beim Serialisieren der Meta-Daten:', err)
|
|
}
|
|
|
|
useHead({
|
|
title: metaTitle,
|
|
meta: [
|
|
{ name: 'description', content: metaDescription },
|
|
{ property: 'og:title', content: metaTitle },
|
|
{ property: 'og:description', content: metaDescription },
|
|
{ property: 'og:image', content: metaImage },
|
|
{ name: 'twitter:title', content: metaTitle },
|
|
{ name: 'twitter:description', content: metaDescription },
|
|
{ name: 'twitter:image', content: metaImage },
|
|
]
|
|
})
|
|
}
|