diff --git a/scripts/update-data.mjs b/scripts/update-data.mjs index e6d4f83..3d1b354 100755 --- a/scripts/update-data.mjs +++ b/scripts/update-data.mjs @@ -89,7 +89,7 @@ const writeJSON = async (file, data) => await fs.writeFile(file, JSON.stringify( } } - articles.push({ title, slug, category: data.category?.trim() ?? '' }) + articles.push({ title, slug, category: data.category?.trim() ?? '', order: data.order ?? 0 }) } const filteredTags = tags.filter((t) => (t.articleCount ?? 0) > 0) diff --git a/src/components/ArticleNav.astro b/src/components/ArticleNav.astro new file mode 100644 index 0000000..63e89d9 --- /dev/null +++ b/src/components/ArticleNav.astro @@ -0,0 +1,94 @@ +--- +import { getCollection } from 'astro:content' +import { t } from '../i18n/index.ts' + +interface Props { + slug: string + category: string + lang: string + labels?: Record +} + +const { slug, category, lang, labels = {} } = Astro.props + +const allArticles = await getCollection('articles') + +const categoryArticles = allArticles + .filter((a) => a.data.lang === lang && a.data.category === category && a.data.status === 'Published') + .map((a) => ({ slug: a.data.slug, title: a.data.title, order: a.data.order ?? 0 })) + .sort((a, b) => { + if (a.order === 0 && b.order === 0) return 0 + if (a.order === 0) return 1 + if (b.order === 0) return -1 + if (a.order === b.order) return Math.random() - 0.5 + return a.order - b.order + }) + +const currentIndex = categoryArticles.findIndex((a) => a.slug === slug) + +const prevArticle = currentIndex > 0 ? categoryArticles[currentIndex - 1] : null +const nextArticle = currentIndex < categoryArticles.length - 1 ? categoryArticles[currentIndex + 1] : null + +const langPrefix = lang === 'en' ? '/en' : '' +const isOnlyPrev = prevArticle && !nextArticle +const isOnlyNext = nextArticle && !prevArticle +--- + +{ + (prevArticle || nextArticle) && ( + + ) +} diff --git a/src/content.config.ts b/src/content.config.ts index 3db7d5b..70f6fd0 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -26,6 +26,7 @@ const articles = defineCollection({ author: z.string(), date: z.union([z.string(), z.date()]), views: z.number().default(0), + order: z.number().default(0), status: z.enum(['Published', 'Draft']).default('Published'), }), }) diff --git a/src/content/articles/tr/linear-model-nedir.mdx b/src/content/articles/tr/linear-model-nedir.mdx index 9b61ef1..107b473 100644 --- a/src/content/articles/tr/linear-model-nedir.mdx +++ b/src/content/articles/tr/linear-model-nedir.mdx @@ -8,6 +8,7 @@ tags: ['linear-regression', 'supervised-learning', 'teori'] author: '@omerfdmrl' date: '2026-03-29' views: 0 +order: 3 status: 'Published' --- diff --git a/src/content/articles/tr/linear-regression-nedir.mdx b/src/content/articles/tr/linear-regression-nedir.mdx index df24d76..13271c7 100644 --- a/src/content/articles/tr/linear-regression-nedir.mdx +++ b/src/content/articles/tr/linear-regression-nedir.mdx @@ -8,6 +8,7 @@ tags: ['linear-regression', 'supervised-learning', 'teori'] author: '@omerfdmrl' date: '2026-03-22' views: 0 +order: 2 status: 'Published' --- diff --git a/src/content/articles/tr/supervised-learning-nedir.mdx b/src/content/articles/tr/supervised-learning-nedir.mdx index 2615faf..e487437 100644 --- a/src/content/articles/tr/supervised-learning-nedir.mdx +++ b/src/content/articles/tr/supervised-learning-nedir.mdx @@ -8,6 +8,7 @@ tags: ['supervised-learning', 'teori'] author: '@omerfdmrl' date: '2026-03-21' views: 0 +order: 1 status: 'Published' --- diff --git a/src/data/en/labels.json b/src/data/en/labels.json index f3720cf..d54cddc 100644 --- a/src/data/en/labels.json +++ b/src/data/en/labels.json @@ -39,7 +39,9 @@ "home": "Home", "by": "By", "onThisPage": "On this page", - "share": "Share" + "share": "Share", + "previous": "Previous", + "next": "Next" }, "share": { "label": "Share" diff --git a/src/data/tr/articles.json b/src/data/tr/articles.json index 0badc07..1eedeca 100644 --- a/src/data/tr/articles.json +++ b/src/data/tr/articles.json @@ -2,16 +2,19 @@ { "title": "Linear Model Nedir?", "slug": "linear-model-nedir", - "category": "machine-learning" + "category": "machine-learning", + "order": 3 }, { "title": "Linear Regression Nedir?", "slug": "linear-regression-nedir", - "category": "machine-learning" + "category": "machine-learning", + "order": 2 }, { "title": "Supervised Learning Nedir?", "slug": "supervised-learning-nedir", - "category": "machine-learning" + "category": "machine-learning", + "order": 1 } ] diff --git a/src/data/tr/labels.json b/src/data/tr/labels.json index f4f7c3a..cb42876 100644 --- a/src/data/tr/labels.json +++ b/src/data/tr/labels.json @@ -39,7 +39,9 @@ "home": "Ana Sayfa", "by": "Yazar", "onThisPage": "Sayfada", - "share": "Paylaş" + "share": "Paylaş", + "previous": "Önceki", + "next": "Sonraki" }, "share": { "label": "Paylaş" diff --git a/src/pages/articles/[slug].astro b/src/pages/articles/[slug].astro index b9d7dc1..945a10d 100644 --- a/src/pages/articles/[slug].astro +++ b/src/pages/articles/[slug].astro @@ -4,6 +4,7 @@ import ShareButtons from '../../components/ShareButtons.astro' import GitHubUserCard from '../../components/GitHubUserCard.astro' import ReadingProgress from '../../components/ReadingProgress.astro' import TableOfContents from '../../components/TableOfContents.astro' +import ArticleNav from '../../components/ArticleNav.astro' import { getCollection, render } from 'astro:content' import { SITE } from '../../config.mjs' import { getLangFromUrl, t } from '../../i18n/index.ts' @@ -153,6 +154,13 @@ const onThisPageLabel = t(labels, 'article.onThisPage') + + diff --git a/src/pages/en/articles/[slug].astro b/src/pages/en/articles/[slug].astro index 856c651..565fdee 100644 --- a/src/pages/en/articles/[slug].astro +++ b/src/pages/en/articles/[slug].astro @@ -4,6 +4,7 @@ import ShareButtons from '../../../components/ShareButtons.astro' import GitHubUserCard from '../../../components/GitHubUserCard.astro' import ReadingProgress from '../../../components/ReadingProgress.astro' import TableOfContents from '../../../components/TableOfContents.astro' +import ArticleNav from '../../../components/ArticleNav.astro' import { getCollection, render } from 'astro:content' import { SITE } from '../../../config.mjs' import { t } from '../../../i18n/index.ts' @@ -152,6 +153,8 @@ const onThisPageLabel = t(labels, 'article.onThisPage') + +