diff --git a/src/pages/ch/shop/[kategorie]/[unterkategorie].astro b/src/pages/ch/shop/[kategorie]/[unterkategorie].astro index df52d1f..b884e86 100644 --- a/src/pages/ch/shop/[kategorie]/[unterkategorie].astro +++ b/src/pages/ch/shop/[kategorie]/[unterkategorie].astro @@ -21,22 +21,28 @@ const sub = getSubcategory(kategorie!, unterkategorie!)!; // Alle Produkte dieser Unterkategorie (unabhängig davon, welchem Charakter sie zugeordnet sind). const alleProdukte = productsByUnterkategorie(category.slug, sub.slug); -// Ein Charakter (aus dem Kategorien-Bereich im Admin) ist erstmal nur eine VORBEREITETE -// Definition — er erscheint auf der Seite NUR, wenn ihm im Admin auch wirklich ein Produkt mit -// genau diesem Charakter-Code zugeordnet wurde (das Feld "Charakter" am Produkt = seine "Rolle"). -// Ohne zugeordnetes Produkt taucht er hier NICHT auf, auch nicht als Platzhalter — nur echte, -// im Admin angelegte Artikel dürfen auf der Seite erscheinen. +// Zwei getrennte Dinge: die persönliche Vorstellung (Story-Box, "Hallo, ich bin ...") ist reiner +// Vorstellungstext OHNE Kaufversprechen — die zeigt VanVan für JEDEN im Admin definierten +// Charakter, auch schon bevor dafür ein Produkt existiert. Die "Mehr über mich"-Schaltfläche +// erscheint dabei nur, wenn der Charakter auch wirklich einen externen Link (mehrLink) hat. +// Eine echte Shop-KARTE (Foto/Preis/Kaufinfos) bekommt ein Charakter dagegen NUR, wenn ihm im +// Admin auch wirklich ein Produkt mit genau diesem Charakter-Code zugeordnet wurde (das Feld +// "Charakter" am Produkt = seine "Rolle") — ohne echtes Produkt gibt es keine Karte, die einen +// Kauf vortäuscht. const characters = sub.characters ?? []; -const characterEntries = characters - .map((char) => ({ char, product: alleProdukte.find((p) => p.charakter === char.slug) })) - .filter((e) => e.product); +const characterEntries = characters.map((char) => ({ + char, + product: alleProdukte.find((p) => p.charakter === char.slug), +})); +const characterEntriesMitProdukt = characterEntries.filter((e) => e.product); // Produkte ohne (bekannte) Charakter-Zuordnung landen als "weitere Modelle" darunter. -const zugeordneteSlugs = new Set(characterEntries.map((e) => e.product!.slug)); +const zugeordneteSlugs = new Set(characterEntriesMitProdukt.map((e) => e.product!.slug)); const weitere = alleProdukte.filter((p) => !zugeordneteSlugs.has(p.slug)); const hatCharaktere = characterEntries.length > 0; +const hatProduktKarten = characterEntriesMitProdukt.length > 0; const hatWeitere = weitere.length > 0; -const komplettLeer = !hatCharaktere && !hatWeitere; +const komplettLeer = !hatProduktKarten && !hatWeitere; ---
@@ -69,9 +75,11 @@ const komplettLeer = !hatCharaktere && !hatWeitere; ))}
-
- {characterEntries.map(({ product }) => )} -
+ {hatProduktKarten && ( +
+ {characterEntriesMitProdukt.map(({ product }) => )} +
+ )} )} @@ -97,7 +105,7 @@ const komplettLeer = !hatCharaktere && !hatWeitere; {hatWeitere && (
- {hatCharaktere &&

{t.shop.moreVariants}

} + {hatProduktKarten &&

{t.shop.moreVariants}

}
{weitere.map((p) => )}
diff --git a/src/pages/en/shop/[kategorie]/[unterkategorie].astro b/src/pages/en/shop/[kategorie]/[unterkategorie].astro index 8f0b31e..a978d7b 100644 --- a/src/pages/en/shop/[kategorie]/[unterkategorie].astro +++ b/src/pages/en/shop/[kategorie]/[unterkategorie].astro @@ -21,22 +21,28 @@ const sub = getSubcategory(kategorie!, unterkategorie!)!; // Alle Produkte dieser Unterkategorie (unabhängig davon, welchem Charakter sie zugeordnet sind). const alleProdukte = productsByUnterkategorie(category.slug, sub.slug); -// Ein Charakter (aus dem Kategorien-Bereich im Admin) ist erstmal nur eine VORBEREITETE -// Definition — er erscheint auf der Seite NUR, wenn ihm im Admin auch wirklich ein Produkt mit -// genau diesem Charakter-Code zugeordnet wurde (das Feld "Charakter" am Produkt = seine "Rolle"). -// Ohne zugeordnetes Produkt taucht er hier NICHT auf, auch nicht als Platzhalter — nur echte, -// im Admin angelegte Artikel dürfen auf der Seite erscheinen. +// Zwei getrennte Dinge: die persönliche Vorstellung (Story-Box, "Hallo, ich bin ...") ist reiner +// Vorstellungstext OHNE Kaufversprechen — die zeigt VanVan für JEDEN im Admin definierten +// Charakter, auch schon bevor dafür ein Produkt existiert. Die "Mehr über mich"-Schaltfläche +// erscheint dabei nur, wenn der Charakter auch wirklich einen externen Link (mehrLink) hat. +// Eine echte Shop-KARTE (Foto/Preis/Kaufinfos) bekommt ein Charakter dagegen NUR, wenn ihm im +// Admin auch wirklich ein Produkt mit genau diesem Charakter-Code zugeordnet wurde (das Feld +// "Charakter" am Produkt = seine "Rolle") — ohne echtes Produkt gibt es keine Karte, die einen +// Kauf vortäuscht. const characters = sub.characters ?? []; -const characterEntries = characters - .map((char) => ({ char, product: alleProdukte.find((p) => p.charakter === char.slug) })) - .filter((e) => e.product); +const characterEntries = characters.map((char) => ({ + char, + product: alleProdukte.find((p) => p.charakter === char.slug), +})); +const characterEntriesMitProdukt = characterEntries.filter((e) => e.product); // Produkte ohne (bekannte) Charakter-Zuordnung landen als "weitere Modelle" darunter. -const zugeordneteSlugs = new Set(characterEntries.map((e) => e.product!.slug)); +const zugeordneteSlugs = new Set(characterEntriesMitProdukt.map((e) => e.product!.slug)); const weitere = alleProdukte.filter((p) => !zugeordneteSlugs.has(p.slug)); const hatCharaktere = characterEntries.length > 0; +const hatProduktKarten = characterEntriesMitProdukt.length > 0; const hatWeitere = weitere.length > 0; -const komplettLeer = !hatCharaktere && !hatWeitere; +const komplettLeer = !hatProduktKarten && !hatWeitere; ---
@@ -69,9 +75,11 @@ const komplettLeer = !hatCharaktere && !hatWeitere; ))}
-
- {characterEntries.map(({ product }) => )} -
+ {hatProduktKarten && ( +
+ {characterEntriesMitProdukt.map(({ product }) => )} +
+ )} )} @@ -97,7 +105,7 @@ const komplettLeer = !hatCharaktere && !hatWeitere; {hatWeitere && (
- {hatCharaktere &&

{t.shop.moreVariants}

} + {hatProduktKarten &&

{t.shop.moreVariants}

}
{weitere.map((p) => )}
diff --git a/src/pages/fr/shop/[kategorie]/[unterkategorie].astro b/src/pages/fr/shop/[kategorie]/[unterkategorie].astro index 0442a28..62e7fae 100644 --- a/src/pages/fr/shop/[kategorie]/[unterkategorie].astro +++ b/src/pages/fr/shop/[kategorie]/[unterkategorie].astro @@ -21,22 +21,28 @@ const sub = getSubcategory(kategorie!, unterkategorie!)!; // Alle Produkte dieser Unterkategorie (unabhängig davon, welchem Charakter sie zugeordnet sind). const alleProdukte = productsByUnterkategorie(category.slug, sub.slug); -// Ein Charakter (aus dem Kategorien-Bereich im Admin) ist erstmal nur eine VORBEREITETE -// Definition — er erscheint auf der Seite NUR, wenn ihm im Admin auch wirklich ein Produkt mit -// genau diesem Charakter-Code zugeordnet wurde (das Feld "Charakter" am Produkt = seine "Rolle"). -// Ohne zugeordnetes Produkt taucht er hier NICHT auf, auch nicht als Platzhalter — nur echte, -// im Admin angelegte Artikel dürfen auf der Seite erscheinen. +// Zwei getrennte Dinge: die persönliche Vorstellung (Story-Box, "Hallo, ich bin ...") ist reiner +// Vorstellungstext OHNE Kaufversprechen — die zeigt VanVan für JEDEN im Admin definierten +// Charakter, auch schon bevor dafür ein Produkt existiert. Die "Mehr über mich"-Schaltfläche +// erscheint dabei nur, wenn der Charakter auch wirklich einen externen Link (mehrLink) hat. +// Eine echte Shop-KARTE (Foto/Preis/Kaufinfos) bekommt ein Charakter dagegen NUR, wenn ihm im +// Admin auch wirklich ein Produkt mit genau diesem Charakter-Code zugeordnet wurde (das Feld +// "Charakter" am Produkt = seine "Rolle") — ohne echtes Produkt gibt es keine Karte, die einen +// Kauf vortäuscht. const characters = sub.characters ?? []; -const characterEntries = characters - .map((char) => ({ char, product: alleProdukte.find((p) => p.charakter === char.slug) })) - .filter((e) => e.product); +const characterEntries = characters.map((char) => ({ + char, + product: alleProdukte.find((p) => p.charakter === char.slug), +})); +const characterEntriesMitProdukt = characterEntries.filter((e) => e.product); // Produkte ohne (bekannte) Charakter-Zuordnung landen als "weitere Modelle" darunter. -const zugeordneteSlugs = new Set(characterEntries.map((e) => e.product!.slug)); +const zugeordneteSlugs = new Set(characterEntriesMitProdukt.map((e) => e.product!.slug)); const weitere = alleProdukte.filter((p) => !zugeordneteSlugs.has(p.slug)); const hatCharaktere = characterEntries.length > 0; +const hatProduktKarten = characterEntriesMitProdukt.length > 0; const hatWeitere = weitere.length > 0; -const komplettLeer = !hatCharaktere && !hatWeitere; +const komplettLeer = !hatProduktKarten && !hatWeitere; ---
@@ -69,9 +75,11 @@ const komplettLeer = !hatCharaktere && !hatWeitere; ))}
-
- {characterEntries.map(({ product }) => )} -
+ {hatProduktKarten && ( +
+ {characterEntriesMitProdukt.map(({ product }) => )} +
+ )} )} @@ -97,7 +105,7 @@ const komplettLeer = !hatCharaktere && !hatWeitere; {hatWeitere && (
- {hatCharaktere &&

{t.shop.moreVariants}

} + {hatProduktKarten &&

{t.shop.moreVariants}

}
{weitere.map((p) => )}
diff --git a/src/pages/shop/[kategorie]/[unterkategorie].astro b/src/pages/shop/[kategorie]/[unterkategorie].astro index 460e0ee..065e3fa 100644 --- a/src/pages/shop/[kategorie]/[unterkategorie].astro +++ b/src/pages/shop/[kategorie]/[unterkategorie].astro @@ -21,26 +21,31 @@ const sub = getSubcategory(kategorie!, unterkategorie!)!; // Alle Produkte dieser Unterkategorie (unabhängig davon, welchem Charakter sie zugeordnet sind). const alleProdukte = productsByUnterkategorie(category.slug, sub.slug); -// Ein Charakter (aus dem Kategorien-Bereich im Admin) ist erstmal nur eine VORBEREITETE -// Definition — er erscheint auf der Seite NUR, wenn ihm im Admin auch wirklich ein Produkt mit -// genau diesem Charakter-Code zugeordnet wurde (das Feld "Charakter" am Produkt = seine "Rolle"). -// Ohne zugeordnetes Produkt taucht er hier NICHT auf, auch nicht als Platzhalter — nur echte, -// im Admin angelegte Artikel dürfen auf der Seite erscheinen. +// Zwei getrennte Dinge: die persönliche Vorstellung (Story-Box, "Hallo, ich bin ...") ist reiner +// Vorstellungstext OHNE Kaufversprechen — die zeigt VanVan für JEDEN im Admin definierten +// Charakter, auch schon bevor dafür ein Produkt existiert. Die "Mehr über mich"-Schaltfläche +// erscheint dabei nur, wenn der Charakter auch wirklich einen externen Link (mehrLink) hat. +// Eine echte Shop-KARTE (Foto/Preis/Kaufinfos) bekommt ein Charakter dagegen NUR, wenn ihm im +// Admin auch wirklich ein Produkt mit genau diesem Charakter-Code zugeordnet wurde (das Feld +// "Charakter" am Produkt = seine "Rolle") — ohne echtes Produkt gibt es keine Karte, die einen +// Kauf vortäuscht. const characters = sub.characters ?? []; -const characterEntries = characters - .map((char) => ({ char, product: alleProdukte.find((p) => p.charakter === char.slug) })) - .filter((e) => e.product); +const characterEntries = characters.map((char) => ({ + char, + product: alleProdukte.find((p) => p.charakter === char.slug), +})); +const characterEntriesMitProdukt = characterEntries.filter((e) => e.product); // Produkte ohne (bekannte) Charakter-Zuordnung landen als "weitere Modelle" darunter. -const zugeordneteSlugs = new Set(characterEntries.map((e) => e.product!.slug)); +const zugeordneteSlugs = new Set(characterEntriesMitProdukt.map((e) => e.product!.slug)); const weitere = alleProdukte.filter((p) => !zugeordneteSlugs.has(p.slug)); const hatCharaktere = characterEntries.length > 0; +const hatProduktKarten = characterEntriesMitProdukt.length > 0; const hatWeitere = weitere.length > 0; // Damit "schon vorbereitet aussieht", auch wenn VanVan hier noch gar keine Produkte/Charaktere // eingetragen hat: statt einer nackten Text-Zeile zeigen wir schon die spätere Karten-Optik, -// nur eben mit Platzhaltern. Sobald echte Produkte/Charaktere dazukommen, verschwinden diese -// automatisch (siehe hatCharaktere/hatWeitere oben). -const komplettLeer = !hatCharaktere && !hatWeitere; +// nur eben mit Platzhaltern. Sobald echte Produkte dazukommen, verschwinden diese automatisch. +const komplettLeer = !hatProduktKarten && !hatWeitere; ---
@@ -75,10 +80,13 @@ const komplettLeer = !hatCharaktere && !hatWeitere; ))}
- {/* Kartenreihe wie im Shop-Grid — nur Foto, Preis und Kaufinfos, keine Geschichten. */} -
- {characterEntries.map(({ product }) => )} -
+ {/* Kartenreihe wie im Shop-Grid — nur Foto, Preis und Kaufinfos, keine Geschichten. Nur + Charaktere mit echtem Produkt bekommen hier eine Karte. */} + {hatProduktKarten && ( +
+ {characterEntriesMitProdukt.map(({ product }) => )} +
+ )} )} @@ -104,7 +112,7 @@ const komplettLeer = !hatCharaktere && !hatWeitere; {hatWeitere && (
- {hatCharaktere &&

{t.shop.moreVariants}

} + {hatProduktKarten &&

{t.shop.moreVariants}

}
{weitere.map((p) => )}