Les photo blog posts génèrent maintenant un JSON-LD BlogPosting avec headline, datePublished et lien vers le schema Person via @id. PhotoBlogPostContent passe description, date et tags à PhotoLayout qui les transmet au composant SEO.
60 lines
No EOL
2.2 KiB
Text
60 lines
No EOL
2.2 KiB
Text
---
|
|
import PhotoFooter from '../components/photo/PhotoFooter.astro';
|
|
import SEO from '../components/SEO.astro';
|
|
import type { Locale } from '../utils/i18n';
|
|
|
|
interface Props {
|
|
title?: string;
|
|
description?: string;
|
|
ogType?: string;
|
|
article?: { publishedTime?: string; tags?: string[] };
|
|
enableScroll?: boolean;
|
|
lang?: Locale;
|
|
}
|
|
|
|
const {
|
|
title = "Galerie Photo - Jalil Arfaoui",
|
|
description = "Portfolio photo de Jalil Arfaoui. Portraits, paysages, cultures, musique, nature.",
|
|
ogType,
|
|
article,
|
|
enableScroll = false,
|
|
lang = 'fr',
|
|
} = Astro.props;
|
|
---
|
|
|
|
<!doctype html>
|
|
<html lang={lang} dir={lang === 'ar' ? 'rtl' : 'ltr'}>
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>{title}</title>
|
|
<SEO title={title} description={description} ogType={ogType} article={article} />
|
|
|
|
<!-- Google Fonts - Karla -->
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Karla:ital,wght@0,400;0,600;0,700;1,400&display=swap" rel="stylesheet">
|
|
|
|
<!-- Dark mode script (appliqué directement pour la galerie) -->
|
|
<script is:inline>
|
|
document.documentElement.classList.add('dark')
|
|
</script>
|
|
|
|
<link rel="icon" type="image/x-icon" href="/assets/images/favicon.png" />
|
|
<link rel="alternate" type="application/rss+xml" title="Jalil Arfaoui — Photo Blog" href="/rss.xml" />
|
|
<!-- Privacy-friendly analytics by Plausible -->
|
|
<script is:inline async src="https://plausible.io/js/pa-fP2pF1VtXKDIjQczHCynl.js"></script>
|
|
<script is:inline>
|
|
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
|
|
plausible.init()
|
|
</script>
|
|
<Fragment set:html={import.meta.env.HEADER_INJECT} />
|
|
</head>
|
|
<body class={`antialiased bg-black text-white ${enableScroll ? '' : 'overflow-hidden'}`} style="font-family: 'Karla', 'Helvetica Neue', Helvetica, Arial, sans-serif;">
|
|
<slot />
|
|
|
|
<PhotoFooter lang={lang} />
|
|
|
|
<Fragment set:html={import.meta.env.FOOTER_INJECT} />
|
|
</body>
|
|
</html> |