← كل المقالات

معمارية محتوى قابلة للصيانة في Astro

كيف تنظم Collections والمسارات والقوالب والترجمات حتى يظل موقع Astro سهلاً في التوسع.

الخلاصة

ضع بيانات المقالات في Collection typed، واجعل ملفات المسارات صغيرة، ودع المكونات المشتركة تملك العرض بدون أن تملك المحتوى.

يمكن أن يبدأ موقع محتوى في Astro بعدة ملفات Markdown ومسار ديناميكي واحد. ومع نموه تضيف الترجمات والتصنيفات والمحتوى المرتبط والبيانات الوصفية تعقيداً يتوزع بسهولة على ملفات كثيرة.

تظل المعمارية قابلة للصيانة عندما تكون لكل طبقة مسؤولية واحدة واضحة.

ضع المحتوى المتكرر في Collection

تشترك المقالات في شكل واحد: عنوان ووصف وتاريخ وتصنيف ووسوم ولغة ومحتوى. لذلك تناسبها build-time content collection.

const articles = defineCollection({
  loader: glob({
    base: "./src/content/articles",
    pattern: "**/*.md",
  }),
  schema: z.object({
    title: z.string(),
    description: z.string(),
    locale: z.enum(["en", "ar"]),
    publishedAt: z.coerce.date(),
    category: z.string(),
    tags: z.array(z.string()).default([]),
    draft: z.boolean().default(false),
  }),
});

يمسك schema البيانات الناقصة أثناء البناء ويمنح المكونات types موثوقة. أما الصفحات المنفردة مثل «عني» و«تواصل» فيمكن أن تبقى صفحات Astro أو مكونات مخصصة؛ نقل كل فقرة إلى طبقة بيانات عامة قد يصعب التحرير بدون فائدة.

اجعل ملفات المسارات صغيرة

يجب أن يجلب مسار المقال الإدخالات وينشئ المسارات الثابتة ويمرر مقالاً واحداً إلى قالب القراءة، لا أن يحتوي تصميم المقال كله.

بهذا تصبح مسارات العربية والإنجليزية wrappers صغيرة حول مكون عرض واحد، ولا تضطر لتكرار إصلاح metadata أو جدول المحتويات.

افصل الرابط العام الثابت عن ID الداخلي. يجب أن يكون ID فريداً بين كل ملفات اللغات، بينما يمكن للترجمتين مشاركة slug نفسه تحت بادئ لغة مختلف.

اعتبر اللغة مدخلاً أساسياً

لا تستنتج اللغة من pathname داخل كل مكون. مرر locale typed واقرأ النصوص والمسارات والاتجاه وتنسيق التاريخ من وحدة ترجمة واحدة.

يجب أن يحدد المستند lang وdir. وتقلل خصائص CSS المنطقية مثل margin-inline وborder-inline-start عدد تعديلات RTL.

يحتاج المقال المترجم إلى translationKey ثابت يربط الإدخالين حتى لو اختلف العنوان أو الرابط لاحقاً.

دع Layout يملك metadata

يبني القالب الأساسي canonical وبدائل اللغة وOpen Graph وRSS والبيانات المنظمة المشتركة. ويمرر قالب المقال القيم الخاصة به وTechArticle schema.

هذا يحافظ على اتساق SEO ويمنح كل صفحة عنواناً ووصفاً فريدين.

اجعل JavaScript مقصوداً

معظم صفحات النشر لا تحتاج framework في المتصفح. يمكن لتبديل الوضع والقائمة وفلاتر الأرشيف العمل بسكربتات صغيرة، بينما يظل المحتوى والتنقل والبطاقات HTML ثابتاً.

مسار النشر الجيد واضح: أضف المقال في مجلد اللغة، وأكمل frontmatter، واربط الترجمة، وشغل build الإنتاج، ثم راجع الرابط والبيانات والروابط وقالب القراءة.

نهاية الملاحظة.