diff --git a/src/Shared/Landing/LandingRegistry.php b/src/Shared/Landing/LandingRegistry.php index bb73c1ae..36a80467 100644 --- a/src/Shared/Landing/LandingRegistry.php +++ b/src/Shared/Landing/LandingRegistry.php @@ -29,12 +29,33 @@ final class LandingRegistry /** @var array|null ساخت تنبل؛ هر درخواست حداکثر یک بار می‌سازدش. */ private ?array $pages = null; + /** + * صفحه‌هایی که در فوتر می‌آیند. + * + * فوتر فهرست کامل نیست: با هر خوشهٔ کلیدواژهٔ تازه، ستونِ «راهکارها» بلندتر از + * بقیهٔ فوتر می‌شد و صفحه را زشت می‌کرد. بقیهٔ صفحه‌ها از بخش «راهکارهای دیگر» + * همین صفحه‌ها و از sitemap در دسترس‌اند — {@see LandingPageTest} تضمین می‌کند + * هیچ‌کدام از این فهرست جا نمانند. + * + * @var list + */ + private const FEATURED = [self::CLINIC, self::OFFICE, self::BOOKING, self::DENTAL, self::BEAUTY, self::FREE]; + /** @return array کلید = اسلاگ */ public function all(): array { return $this->pages ??= $this->build(); } + /** @return list صفحه‌های فوتر، به همان ترتیبِ تعریف‌شده */ + public function featured(): array + { + return array_values(array_filter(array_map( + fn (string $slug): ?LandingPage => $this->find($slug), + self::FEATURED, + ))); + } + public function find(string $slug): ?LandingPage { return $this->all()[$slug] ?? null; @@ -134,7 +155,7 @@ final class LandingRegistry ['q' => 'تداخل اتاق و دستگاه چطور کنترل می‌شود؟', 'a' => 'با تعریف منبع. نوبت علاوه بر وقت پزشک، وقت منبع را هم اشغال می‌کند.'], ['q' => 'گزارش مالی تفکیک‌شده دارد؟', 'a' => 'بله، فهرست پرداخت‌ها با وضعیت تسویه و خلاصهٔ مجموع، پرداخت‌شده و تسویه‌نشده.'], ], - related: [self::CLINIC, self::ACCOUNTING, self::DENTAL], + related: [self::CLINIC, self::ACCOUNTING, self::PHYSIOTHERAPY], ), new LandingPage( slug: self::FREE, diff --git a/templates/public/_footer.html.twig b/templates/public/_footer.html.twig index 940b759d..c81e2833 100644 --- a/templates/public/_footer.html.twig +++ b/templates/public/_footer.html.twig @@ -36,7 +36,7 @@