Servizi e landing Promo ed eventi: rinomine, pulizia contenuti e nuova pagina
Servizi: - Personal Training rinominato "One to One" (slug /services/one-to-one) con redirect 301 dal vecchio URL e migrazione DB idempotente dei contenuti taggati - Nuova pagina "Small Group" (slug /services/small-group, fuori dalla griglia) - Rimossi i titoli intro di /training e /services e le liste feature di One to One, Small Group, Rehab e Osteopatia; la lista feature ora è condizionale - Fix elenco puntato nel long-description (white-space: pre-line, selettore ancorato al container per gli elementi resi dal componente <T>) - Immagine di Performance Class aggiornata - Nella griglia Servizi i riquadri "One to One" e "Performance Class" rimandano a /training; nella pagina Training i riquadri One to One e Small Group aprono le rispettive schede servizio Landing: - Pagina "Promo ed eventi" (slug /promo-eventi) integrata nel sito con header e footer condivisi, basata sul nuovo mockup di lancio - Card a 5 incontri con prezzi edizione apertura, FAQ ad accordion e acquisto tramite gestionale bsport - Nuova voce di menu "Promo ed eventi" Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -29,10 +29,12 @@ const tones = ['tan', 'taupe', 'dark'];
|
||||
<div class="container prog">
|
||||
<div>
|
||||
<h2>{t(`service.${slug}.title`).toUpperCase()}</h2>
|
||||
<T tag={`service.${slug}.long-description`} as="p" />
|
||||
<ul class="prog__features">
|
||||
{service.features.map((_, i) => <T tag={`service.${slug}.feature.${i + 1}`} as="li" />)}
|
||||
</ul>
|
||||
<T tag={`service.${slug}.long-description`} as="p" class="prog__desc" />
|
||||
{service.features.length > 0 && (
|
||||
<ul class="prog__features">
|
||||
{service.features.map((_, i) => <T tag={`service.${slug}.feature.${i + 1}`} as="li" />)}
|
||||
</ul>
|
||||
)}
|
||||
{heroImg && (
|
||||
<TImg tag={`service.${slug}.image`} src={heroImg} alt={t(`service.${slug}.title`)} class="prog__img" widths={[600, 1000]} sizes="(max-width:991px) 100vw, 60vw" data-reveal="fade" />
|
||||
)}
|
||||
@@ -97,6 +99,7 @@ const tones = ['tan', 'taupe', 'dark'];
|
||||
|
||||
<style>
|
||||
.prog { display: grid; grid-template-columns: 2.2fr 1fr; gap: 60px; }
|
||||
.prog :global(.prog__desc) { white-space: pre-line; }
|
||||
.prog__features { padding-left: 20px; display: grid; gap: 8px; margin-bottom: 30px; }
|
||||
.prog__features li::marker { color: var(--c-accent); }
|
||||
.prog__img { width: 100%; height: auto; margin-bottom: 30px; }
|
||||
|
||||
@@ -9,6 +9,9 @@ import { t } from '../../lib/content';
|
||||
const images = import.meta.glob<{ default: ImageMetadata }>('../../assets/img/program-*.jpg', { eager: true });
|
||||
const imgOf = (slug: string) => Object.entries(images).find(([p]) => p.includes(`program-${slug}.`))?.[1]?.default;
|
||||
const gridServices = services.filter((p) => p.grid !== false);
|
||||
// Questi servizi rimandano alla pagina Training invece che alla scheda di dettaglio
|
||||
const TRAINING_LINK = new Set(['one-to-one', 'performance-class']);
|
||||
const moreHref = (slug: string) => (TRAINING_LINK.has(slug) ? '/training' : `/services/${slug}`);
|
||||
export const prerender = false;
|
||||
---
|
||||
<Base title={t('services.meta.title')} description={t('services.meta.description')}>
|
||||
@@ -16,7 +19,6 @@ export const prerender = false;
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="section-heading">
|
||||
<T tag="services.intro.title" as="h2" />
|
||||
<T tag="services.intro.body" as="p" />
|
||||
</div>
|
||||
<div class="plist">
|
||||
@@ -31,7 +33,7 @@ export const prerender = false;
|
||||
<T tag={`service.${p.slug}.title`} as="h3" />
|
||||
<T tag={`service.${p.slug}.subtitle`} as="p" class="plist__sub" />
|
||||
<T tag={`service.${p.slug}.excerpt`} as="p" />
|
||||
<a class="plist__more" href={`/services/${p.slug}`}>{t('services.card.more-label')}</a>
|
||||
<a class="plist__more" href={moreHref(p.slug)}>{t('services.card.more-label')}</a>
|
||||
</div>
|
||||
</article>
|
||||
))}
|
||||
|
||||
Reference in New Issue
Block a user