feat(katalog+tasarim): şehir adları her yerde link; piksel yüzeylere beyaz ton
- ilSayfaHref: üniversite sayfası il hapı, /universiteler listesi, bölüm / sonuç / listem / tadımlık satırlarındaki il metası şehir sayfasına gider. - Şehir kümeleri tüm (üniversite, il) çiftlerinden: DB'deki her il değerinin sayfası var (ODTÜ Ankara + KKTC); dev'de eski globalThis önbelleğine dayanıklı. - PikselZemin ton="acik", CtaBandi/CtaSiraForm ton="beyaz": /universiteler altı ve /meraklisina kapanışı beyaz, diğer bantlar mavi (dönüşümlü). - ilUlkeHaritasi: il değerinden ülke haritası + şehir konumu. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -64,6 +64,8 @@ const globalKatalog = globalThis as unknown as {
|
||||
uniOzetler?: UniOzet[];
|
||||
iller?: IlOzet[];
|
||||
ilMap?: Map<string, IlOzet>;
|
||||
/** slug → (il → o ildeki program sayısı); getAllUniversiteler doldurur */
|
||||
uniIlAdetleri?: Map<string, Map<string, number>>;
|
||||
};
|
||||
|
||||
function bolumMapGetir(): Map<string, BolumKayit> {
|
||||
@@ -335,6 +337,7 @@ export function getAllUniversiteler(): UniOzet[] {
|
||||
}
|
||||
sayac.set(row.il, (sayac.get(row.il) ?? 0) + row.adet);
|
||||
}
|
||||
globalKatalog.uniIlAdetleri = ilAdetleri;
|
||||
for (const [slug, sayac] of ilAdetleri) {
|
||||
let enIyi: string | null = null;
|
||||
let enCok = 0;
|
||||
@@ -378,7 +381,9 @@ export type IlOzet = {
|
||||
slug: string;
|
||||
/** Görünen ad: İstanbul, Bakü-Azerbaycan */
|
||||
ad: string;
|
||||
/** Bu ilde yer alan üniversiteler (UniOzet.il esas; ad sırasıyla) */
|
||||
/** DB biçiminde ham il ("İSTANBUL"); harita anahtarı */
|
||||
il: string;
|
||||
/** Bu ilde programı olan üniversiteler (ad sırasıyla) */
|
||||
uniler: UniOzet[];
|
||||
programSayisi: number;
|
||||
};
|
||||
@@ -395,25 +400,42 @@ function ilGorunenAd(il: string): string {
|
||||
|
||||
/**
|
||||
* Üniversiteleri iline göre kümeler; sıralama üniversite sayısına göre
|
||||
* azalan, eşitlikte ad. Her üniversite tek ilde sayılır (UniOzet.il: en çok
|
||||
* programının bulunduğu il). İli olmayan (NULL/boş) üniversite hiçbir ile
|
||||
* girmez. KKTC ve yurt dışı şehirler de birer ildir (LEFKOŞA, BAKÜ-…).
|
||||
* azalan, eşitlikte ad. Bir üniversite **programı olan her ilde** sayılır
|
||||
* (ODTÜ hem Ankara'da hem KKTC'de; öğrenci "KKTC'de okuyabileceğim
|
||||
* üniversiteler" diye bakar) — böylece DB'deki her il değerinin sayfası
|
||||
* vardır ve program satırlarındaki her şehir adı güvenle link olur
|
||||
* (`ilSayfaHref`). `programSayisi` o ildeki program sayısıdır.
|
||||
*/
|
||||
export function getAllIller(): IlOzet[] {
|
||||
if (!globalKatalog.iller) {
|
||||
// Dev'de globalThis önbelleği HMR'ı aşar: uniOzetler eski modül koduyla
|
||||
// kurulduysa il sayacı yoktur; özetler yeniden kurulur.
|
||||
if (!globalKatalog.uniIlAdetleri) globalKatalog.uniOzetler = undefined;
|
||||
const uniler = getAllUniversiteler();
|
||||
const ilAdetleri = globalKatalog.uniIlAdetleri!;
|
||||
const bySlug = new Map<string, IlOzet>();
|
||||
for (const u of getAllUniversiteler()) {
|
||||
const il = u.il?.trim();
|
||||
if (!il) continue;
|
||||
const slug = turkishSlugify(il);
|
||||
if (!slug) continue;
|
||||
let kayit = bySlug.get(slug);
|
||||
if (!kayit) {
|
||||
kayit = { slug, ad: ilGorunenAd(il), uniler: [], programSayisi: 0 };
|
||||
bySlug.set(slug, kayit);
|
||||
for (const u of uniler) {
|
||||
const sayac = ilAdetleri.get(u.slug);
|
||||
if (!sayac) continue;
|
||||
for (const [ham, adet] of sayac) {
|
||||
const il = ham.trim();
|
||||
if (!il) continue;
|
||||
const slug = turkishSlugify(il);
|
||||
if (!slug) continue;
|
||||
let kayit = bySlug.get(slug);
|
||||
if (!kayit) {
|
||||
kayit = {
|
||||
slug,
|
||||
ad: ilGorunenAd(il),
|
||||
il,
|
||||
uniler: [],
|
||||
programSayisi: 0,
|
||||
};
|
||||
bySlug.set(slug, kayit);
|
||||
}
|
||||
kayit.uniler.push(u);
|
||||
kayit.programSayisi += adet;
|
||||
}
|
||||
kayit.uniler.push(u);
|
||||
kayit.programSayisi += u.programSayisi;
|
||||
}
|
||||
globalKatalog.ilMap = bySlug;
|
||||
globalKatalog.iller = [...bySlug.values()].sort(
|
||||
|
||||
Reference in New Issue
Block a user