59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
import BlogListView from '@/views/blog/BlogListView.vue';
|
|
import BlogView from '@/views/blog/BlogView.vue';
|
|
import BlogEditorView from '@/views/blog/BlogEditorView.vue';
|
|
import { buildAbsoluteUrl } from '@/utils/seo.js';
|
|
|
|
export default [
|
|
{ path: '/blogs/create', name: 'BlogCreate', component: BlogEditorView, meta: { requiresAuth: true } },
|
|
{ path: '/blogs/:id/edit', name: 'BlogEdit', component: BlogEditorView, props: true, meta: { requiresAuth: true } },
|
|
// Slug-only route first so it doesn't get captured by the :id route
|
|
{
|
|
path: '/blogs/:slug',
|
|
name: 'BlogSlug',
|
|
component: BlogView,
|
|
props: route => ({ slug: route.params.slug }),
|
|
meta: {
|
|
seo: {
|
|
title: 'Blogs auf YourPart',
|
|
description: 'Oeffentliche Blogs, Beitraege und Community-Inhalte auf YourPart.',
|
|
},
|
|
},
|
|
},
|
|
// Id-constrained route (numeric id only) with optional slug for canonical links
|
|
{
|
|
path: '/blogs/:id(\\d+)/:slug?',
|
|
name: 'Blog',
|
|
component: BlogView,
|
|
props: true,
|
|
meta: {
|
|
seo: {
|
|
title: 'Blogs auf YourPart',
|
|
description: 'Oeffentliche Blogs, Beitraege und Community-Inhalte auf YourPart.',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
path: '/blogs',
|
|
name: 'BlogList',
|
|
component: BlogListView,
|
|
meta: {
|
|
seo: {
|
|
title: 'Blogs auf YourPart - Community-Beitraege und Themen',
|
|
description: 'Entdecke oeffentliche Blogs auf YourPart mit Community-Beitraegen, Gedanken, Erfahrungen und Themen aus verschiedenen Bereichen.',
|
|
keywords: 'Blogs, Community Blog, Artikel, Beitraege, YourPart',
|
|
canonicalPath: '/blogs',
|
|
jsonLd: [
|
|
{
|
|
'@context': 'https://schema.org',
|
|
'@type': 'CollectionPage',
|
|
name: 'Blogs auf YourPart',
|
|
url: buildAbsoluteUrl('/blogs'),
|
|
description: 'Oeffentliche Blogs und Community-Beitraege auf YourPart.',
|
|
inLanguage: 'de',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
];
|