حداکثر سه نوشته با برچسب مشترک
نوشتههای مرتبط حداکثر سه یادداشت همزبان با برچسب مشترکاند؛ رتبه از شمار برچسب مشترک و سپس تاریخ است. لینک قبلی و بعدی فهرست جداگانهای است.
زیر یک نوشته، بعد از لینک قبلی و بعدی، قالب ممکن است فهرست کوتاهی نشان بدهد به نام نوشتههای مرتبط. قاعده کوچک است. فهرست از همان زبان صفحه ساخته میشود. نامزد باید دستکم یک برچسب با نوشتهای که میخوانی مشترک داشته باشد. فهرست حداکثر سه تا را نگه میدارد. ترتیب تعداد برچسب مشترک است، بیشتر اول، و بعد تاریخ، تازهتر اول.
این بلوک همان کنترلی نیست که برچسبش نوشتهی بعدی است. بعدی و قبلی نوشتههای زبان را با تاریخ میپیمایند. مرتبط برچسب را میپیماید. میتوانند به یادداشتهای متفاوت اشاره کنند، و هر کدام میتواند نباشد.
سه تا چطور انتخاب میشوند
src/pages/[lang]/blog/[...slug].astro مقدار getPosts(lang) را میخواند. این کمکتابع مجموعهی وبلاگ را میخواند، فایلهایی را نگه میدارد که پوشهشان زبان جاری است، پیشنویس را بیرون از توسعه کنار میگذارد، و بر اساس تاریخ نزولی و سپس نامک مرتب میکند. فهرست مرتبط از همین آرایه شروع میشود. نامک جاری حذف میشود. به هر نوشتهی مانده امتیاز میدهند به تعداد برچسبهایی که در مجموعهی برچسب نوشتهی جاری هستند. امتیاز صفر حذف میشود. بقیه بر اساس امتیاز نزولی مرتب میشوند و بعد بر اساس date نزولی. slice(0, 3) سر این رتبهبندی را نگه میدارد.
تساوی در امتیاز و تاریخ در همان ترتیبی میماند که getPosts از قبل داشت. مرتبسازی تاریخ برای زمانهای برابر پایدار است، و ترتیب مجموعه برای آن تساویها کلید سوم رتبهبندی نیست. میان دو یادداشت با یک تاریخ و یک امتیاز، جا اول و دوم تعیین نمیکنم.
RelatedPosts.astro سه عنوان و نشانی را میگیرد. اگر آرایه خالی باشد چیزی رسم نمیکند. اگر نباشد یک nav با عنوان نوشتههای مرتبط رسم میکند. آن عنوان در مؤلفه h2 است. عنوان نوشته تنها h1 است. لینکها مسیر همزبان از postUrl هستند، پس نوشتهی فارسی اینجا یادداشت مرتبط انگلیسی پیشنهاد نمیدهد.
برچسبهای این نوشته خواندن و راستبهچپ است. یادداشتی وارد فهرست میشود که یکی از این دو را داشته باشد، یا هر دو را. لینکی که میفرستی یک زبان است برچسب دوزبانه و فارسی دارد. نقشهی HTML صفحهای برای خواندن است برچسب ایستا و دوزبانه دارد. هیچکدام با این فایل برچسب مشترک ندارند، پس هیچکدام نامزد نیستند. جملههای بالا راه ماندن آن دو در دسترس است. بلوک مرتبط به یادداشتهای فارسی دیگری نگاه میکند که از قبل خواندن یا راستبهچپ دارند.
امتیاز با دو نوشتهی دیگر چه میکند
یادداشت اشتراک و یادداشت نقشه دوزبانه را با هم مشترک دارند. روی یادداشت اشتراک، دو نوشتهی فارسی قدیمیتر هر دو برچسب دوزبانه و فارسی را دارند: یادداشت نشانی متعارف و یادداشت فایل دوم، هر دو به تاریخ ۲۰۲۶-۱۰-۱۴. امتیاز دو بالاتر از امتیاز یک نقشه است، حتی اگر نقشهی ما تاریخ ۲۰۲۶-۱۰-۱۶ داشته باشد. آن دو نوشتهی قدیمیتر دو جا از سه جا را میگیرند. نقشه تازهترین نوشته با امتیاز یک است، پس جای مانده را میگیرد. ترتیب آن دو نسبت به هم، دو نوشته با امتیاز برابر و تاریخ برابر، ترتیب فهرست است. هر دو از نقشه جلوترند.
روی یادداشت نقشه هر همپوشانی امتیاز یک است: ایستا یا دوزبانه. یادداشت اشتراک همین خوشه تازهترین آنهاست، پس اول است. چند یادداشت دیگر تاریخ ۲۰۲۶-۱۰-۱۴ دارند. برش دو تا از آنها را نگه میدارد و یکی را بیرون میگذارد. کدام تاریخ برابر میماند همان ترتیب قبلی است، نه داوریای که در قالب نوشته شده باشد.
این رتبهبندی اندازهی بازدید نیست. قالب هیچ شمارندهای نمیخواند. تاریخ و برچسب تمام مقایسه است.
قبلی و بعدی فهرست تاریخاند
getStaticPaths همچنین newer و older را میدهد. نوشتهها به همان ترتیب تاریخاند. مورد پیش از نوشتهی جاری تازهتر است و برچسبش نوشتهی بعدی است. مورد پس از آن قدیمیتر است و برچسبش نوشتهی قبلی است. اگر ته فهرست باشی آن سو یک span خالی است. این سه مقاله تاریخ ۲۰۲۶-۱۰-۱۶ را مشترک دارند که از بقیهی یادداشتهای وبلاگ دیرتر است، پس جلوی فهرست تاریخ مینشینند. میان خودشان تاریخ جدایشان نمیکند. صفحهگرد این تساوی را با نامک میشکند تا ترتیب از ساختی به ساخت دیگر عوض نشود. به برچسب نگاه نمیکند.
صفحهی موضوع فهرست چهارم است. رابط فارسی و راستبهچپ مجموعهای ثابت از نامکها را در src/content/topics.ts نام میبرد. عضویت همان آرایه است، نه اشتراک برچسب که وقت درخواست حساب شود. نقشه فهرست پنجم است و شرحش در نقشهی HTML صفحهای برای خواندن است است. گروه نوشتههایش هر نوشتهای است که getPosts برای همان زبان برمیگرداند. این مقاله روی آن فهرست است چون فایلش در مجموعهی فارسی است. مرتبط بودن با یادداشتی دیگر این را عوض نمیکند.
اول همان زبان، بعد لینکی که انتخاب میکنی
نوشتههای مرتبط در یک زبان میمانند چون getPosts با lang صدا شده است. فایل انگلیسی این مقاله همان قدمها را روی برچسبهای انگلیسی اجرا میکند: reading و rtl. یادداشتهای مرتبطش نوشتههای انگلیسیاند. hreflang سازوکار دیگری است. برای زبان مقابل وقتی بیرون میآید که hasTwin راست باشد، و برای این نامک راست است چون فایل انگلیسی وجود دارد. فهرست مرتبط از این پرچم استفاده نمیکند. ترجمه را از دکمهی زبان باز میکنی. میتوانی همین نشانی فارسی را تنها بفرستی، و این موضوع لینکی که میفرستی یک زبان است است. نشانی متعارف خود صفحه است قراردادی است که آن لینکهای سرصفحه پیرویاش میکنند.
صفحهی همکاری جزو محاسبه نیست. جایی است که کار آنجا شرح داده میشود و از پاپیچ ادامه پیدا میکند. نوشتهی مرتبط فقط مقالهای دیگر است.
ترتیب خواندن در صفحه ستون است، بعد صفحهگرد، بعد این بلوک اگر نامزدی مانده باشد. راستبهچپ جای شروع ستون را عوض میکند؛ سقف سه نوشته و لزوم اشتراک برچسب را عوض نمیکند. در صفحهی انگلیسی همان مؤلفه Related posts را چاپ میکند و همان حد را. برچسب هنوز باید مشترک باشد، و زبان هنوز زبان همان نشانی.
اگر از یک مقاله آمدهای و مقالهی دیگری خواستهای، بلوک پیشنهاد خودکار است: حداکثر سه، همزبان، دستکم یک برچسب مشترک، همپوشانی بیشتر اول، تاریخ تازهتر بعد از آن. هر چه بیرون این قاعده باشد لینک معمولی میخواهد، و این یادداشت برای خواهرهایش همان را به کار میبرد.