mise en place du début du back
This commit is contained in:
parent
5210d78d7d
commit
c1c4fda329
22 changed files with 1595 additions and 4 deletions
79
site/blueprints/pages/about.yml
Normal file
79
site/blueprints/pages/about.yml
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
title: À propos
|
||||||
|
icon: users
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
# Contenu
|
||||||
|
content:
|
||||||
|
label: Contenu
|
||||||
|
icon: text
|
||||||
|
columns:
|
||||||
|
- width: 2/3
|
||||||
|
sections:
|
||||||
|
intro:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
intro_headline:
|
||||||
|
type: headline
|
||||||
|
label: Introduction
|
||||||
|
intro_title:
|
||||||
|
label: Titre principal
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
help: "Ex: NOUS FAISONS JOUER LE MONDE."
|
||||||
|
intro_text:
|
||||||
|
label: Sous-titre
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
principal_text:
|
||||||
|
label: Texte principal
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
- width: 1/3
|
||||||
|
sections:
|
||||||
|
team:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
team_headline:
|
||||||
|
type: headline
|
||||||
|
label: Équipe
|
||||||
|
team_title:
|
||||||
|
label: Titre section Équipe
|
||||||
|
type: text
|
||||||
|
default: "Notre Équipe"
|
||||||
|
team_members:
|
||||||
|
label: Membres de l'équipe
|
||||||
|
type: structure
|
||||||
|
fields:
|
||||||
|
name:
|
||||||
|
label: Nom
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
width: 1/2
|
||||||
|
role:
|
||||||
|
label: Poste
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
width: 1/2
|
||||||
|
help: "Ex: CEO & Co-Founder"
|
||||||
|
photo:
|
||||||
|
label: Photo
|
||||||
|
type: files
|
||||||
|
max: 1
|
||||||
|
uploads:
|
||||||
|
template: image
|
||||||
|
# SEO
|
||||||
|
seo:
|
||||||
|
label: SEO
|
||||||
|
icon: search
|
||||||
|
sections:
|
||||||
|
meta:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
meta_title:
|
||||||
|
label: Meta Title
|
||||||
|
type: text
|
||||||
|
meta_description:
|
||||||
|
label: Meta Description
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
maxlength: 160
|
||||||
103
site/blueprints/pages/article.yml
Normal file
103
site/blueprints/pages/article.yml
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
title: Article
|
||||||
|
icon: article
|
||||||
|
|
||||||
|
status:
|
||||||
|
draft:
|
||||||
|
label: Brouillon
|
||||||
|
text: L'article n'est pas visible
|
||||||
|
unlisted:
|
||||||
|
label: Non listé
|
||||||
|
text: L'article est accessible mais pas dans la liste
|
||||||
|
listed:
|
||||||
|
label: Publié
|
||||||
|
text: L'article est visible publiquement
|
||||||
|
|
||||||
|
columns:
|
||||||
|
# Colonne principale
|
||||||
|
main:
|
||||||
|
width: 2/3
|
||||||
|
sections:
|
||||||
|
# En-tête
|
||||||
|
header:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
title:
|
||||||
|
label: Titre de l'article
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
intro:
|
||||||
|
label: Introduction / Chapeau
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
help: "Résumé ou accroche de l'article"
|
||||||
|
|
||||||
|
# Contenu
|
||||||
|
content:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
article_content:
|
||||||
|
label: Contenu de l'article
|
||||||
|
type: blocks
|
||||||
|
fieldsets:
|
||||||
|
heading:
|
||||||
|
label: Titre
|
||||||
|
type: heading
|
||||||
|
text:
|
||||||
|
label: Texte
|
||||||
|
type: text
|
||||||
|
quote:
|
||||||
|
label: Citation
|
||||||
|
type: quote
|
||||||
|
image:
|
||||||
|
label: Image
|
||||||
|
type: image
|
||||||
|
list:
|
||||||
|
label: Liste
|
||||||
|
type: list
|
||||||
|
video:
|
||||||
|
label: Vidéo
|
||||||
|
type: video
|
||||||
|
|
||||||
|
# Sidebar
|
||||||
|
sidebar:
|
||||||
|
width: 1/3
|
||||||
|
sections:
|
||||||
|
# Métadonnées
|
||||||
|
meta:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
date:
|
||||||
|
label: Date de publication
|
||||||
|
type: date
|
||||||
|
required: true
|
||||||
|
default: today
|
||||||
|
cover:
|
||||||
|
label: Image de couverture
|
||||||
|
type: files
|
||||||
|
max: 1
|
||||||
|
uploads:
|
||||||
|
template: image
|
||||||
|
|
||||||
|
# Recommandations
|
||||||
|
related:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
related_articles:
|
||||||
|
label: Articles recommandés
|
||||||
|
type: pages
|
||||||
|
query: site.find('blog').children.listed
|
||||||
|
max: 3
|
||||||
|
help: "Articles similaires à afficher en bas de page"
|
||||||
|
|
||||||
|
# SEO
|
||||||
|
seo:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
meta_title:
|
||||||
|
label: Meta Title
|
||||||
|
type: text
|
||||||
|
meta_description:
|
||||||
|
label: Meta Description
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
maxlength: 160
|
||||||
50
site/blueprints/pages/blog.yml
Normal file
50
site/blueprints/pages/blog.yml
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
title: Blog
|
||||||
|
icon: text
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
# Intro
|
||||||
|
intro:
|
||||||
|
label: Introduction
|
||||||
|
icon: text
|
||||||
|
sections:
|
||||||
|
content:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
intro_title:
|
||||||
|
label: Titre
|
||||||
|
type: text
|
||||||
|
default: "NOS ARTICLES."
|
||||||
|
intro_text:
|
||||||
|
label: Texte d'introduction
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
help: "On décrypte pour vous les ressorts de la gamification, ses actualités et des cas d'étude."
|
||||||
|
articles_list:
|
||||||
|
label: Articles
|
||||||
|
type: pages
|
||||||
|
headline: Liste des articles
|
||||||
|
layout: cards
|
||||||
|
size: medium
|
||||||
|
image:
|
||||||
|
cover: true
|
||||||
|
template: article
|
||||||
|
info: "{{ page.date.toDate('d/m/Y') }}"
|
||||||
|
create: article
|
||||||
|
sortBy: date desc
|
||||||
|
|
||||||
|
# SEO
|
||||||
|
seo:
|
||||||
|
label: SEO
|
||||||
|
icon: search
|
||||||
|
sections:
|
||||||
|
meta:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
meta_title:
|
||||||
|
label: Meta Title
|
||||||
|
type: text
|
||||||
|
meta_description:
|
||||||
|
label: Meta Description
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
maxlength: 160
|
||||||
54
site/blueprints/pages/expertise.yml
Normal file
54
site/blueprints/pages/expertise.yml
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
title: Expertise
|
||||||
|
icon: wand
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
# Intro
|
||||||
|
intro:
|
||||||
|
label: Introduction
|
||||||
|
icon: text
|
||||||
|
columns:
|
||||||
|
- width: 2/3
|
||||||
|
sections:
|
||||||
|
content:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
intro_title:
|
||||||
|
label: Titre principal
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
help: "Ex: PLAY THE REAL."
|
||||||
|
contenu:
|
||||||
|
label: Contenu
|
||||||
|
type: blocks
|
||||||
|
fieldsets:
|
||||||
|
text:
|
||||||
|
label: Texte
|
||||||
|
type: text
|
||||||
|
- width: 1/3
|
||||||
|
sections:
|
||||||
|
media:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
video:
|
||||||
|
label: Vidéo d'arrière-plan
|
||||||
|
type: files
|
||||||
|
max: 1
|
||||||
|
uploads:
|
||||||
|
template: image
|
||||||
|
|
||||||
|
# SEO
|
||||||
|
seo:
|
||||||
|
label: SEO
|
||||||
|
icon: search
|
||||||
|
sections:
|
||||||
|
meta:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
meta_title:
|
||||||
|
label: Meta Title
|
||||||
|
type: text
|
||||||
|
meta_description:
|
||||||
|
label: Meta Description
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
maxlength: 160
|
||||||
86
site/blueprints/pages/game.yml
Normal file
86
site/blueprints/pages/game.yml
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
title: Jeu
|
||||||
|
icon: play
|
||||||
|
|
||||||
|
# status:
|
||||||
|
# draft:
|
||||||
|
# label: Brouillon
|
||||||
|
# text: Le jeu n'est pas visible
|
||||||
|
# unlisted:
|
||||||
|
# label: Non listé
|
||||||
|
# text: Le jeu est accessible mais pas dans la liste
|
||||||
|
# listed:
|
||||||
|
# label: Publié
|
||||||
|
# text: Le jeu est visible publiquement
|
||||||
|
|
||||||
|
columns:
|
||||||
|
# Colonne principale
|
||||||
|
main:
|
||||||
|
width: 2/3
|
||||||
|
sections:
|
||||||
|
# Informations principales
|
||||||
|
info:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
title:
|
||||||
|
label: Nom du jeu
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
help: "Ex: Mozzle"
|
||||||
|
description:
|
||||||
|
label: Description
|
||||||
|
type: textarea
|
||||||
|
size: medium
|
||||||
|
help: "Un thème, 5 mots cachés... mais chacun a une lettre manquante !"
|
||||||
|
rules:
|
||||||
|
label: Règles du jeu
|
||||||
|
type: blocks
|
||||||
|
fieldsets:
|
||||||
|
- heading
|
||||||
|
- text
|
||||||
|
- list
|
||||||
|
|
||||||
|
# Sidebar
|
||||||
|
sidebar:
|
||||||
|
width: 1/3
|
||||||
|
sections:
|
||||||
|
# Visuel
|
||||||
|
visual:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
cover:
|
||||||
|
label: Image de couverture
|
||||||
|
type: files
|
||||||
|
max: 1
|
||||||
|
uploads:
|
||||||
|
template: image
|
||||||
|
badge:
|
||||||
|
label: Badge
|
||||||
|
type: select
|
||||||
|
options:
|
||||||
|
none: Aucun
|
||||||
|
new: NEW
|
||||||
|
coming_soon: Coming Soon
|
||||||
|
popular: Populaire
|
||||||
|
|
||||||
|
# Statut et liens
|
||||||
|
status:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
game_status:
|
||||||
|
label: Statut du jeu
|
||||||
|
type: select
|
||||||
|
required: true
|
||||||
|
default: available
|
||||||
|
options:
|
||||||
|
available: Disponible
|
||||||
|
coming_soon: Bientôt disponible
|
||||||
|
maintenance: En maintenance
|
||||||
|
play_link:
|
||||||
|
label: Lien pour jouer
|
||||||
|
type: url
|
||||||
|
help: "URL vers le jeu intégré ou externe"
|
||||||
|
is_embedded:
|
||||||
|
label: Jeu intégré
|
||||||
|
type: toggle
|
||||||
|
text: Le jeu s'affiche directement sur la page
|
||||||
|
default: true
|
||||||
59
site/blueprints/pages/home.yml
Normal file
59
site/blueprints/pages/home.yml
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
title: Accueil
|
||||||
|
icon: home
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
# Hero Section
|
||||||
|
hero:
|
||||||
|
label: Hero
|
||||||
|
icon: star
|
||||||
|
columns:
|
||||||
|
- width: 2/3
|
||||||
|
sections:
|
||||||
|
hero_content:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
hero_title:
|
||||||
|
label: Titre principal
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
help: "Ex: PLAY TO ENGAGE"
|
||||||
|
hero_subtitle:
|
||||||
|
label: Sous-titre
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
help: "Ex: Nous transformons les interactions en défis pertinents et gratifiants"
|
||||||
|
hero_cta_text:
|
||||||
|
label: Texte du bouton CTA
|
||||||
|
type: text
|
||||||
|
default: Explorer
|
||||||
|
hero_cta_link:
|
||||||
|
label: Lien du bouton CTA
|
||||||
|
type: pages
|
||||||
|
max: 1
|
||||||
|
- width: 1/3
|
||||||
|
sections:
|
||||||
|
media:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
video:
|
||||||
|
label: Vidéo d'arrière-plan
|
||||||
|
type: files
|
||||||
|
max: 1
|
||||||
|
uploads:
|
||||||
|
template: image
|
||||||
|
# SEO
|
||||||
|
seo:
|
||||||
|
label: SEO
|
||||||
|
icon: search
|
||||||
|
sections:
|
||||||
|
meta:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
meta_title:
|
||||||
|
label: Meta Title
|
||||||
|
type: text
|
||||||
|
meta_description:
|
||||||
|
label: Meta Description
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
maxlength: 160
|
||||||
53
site/blueprints/pages/jouer.yml
Normal file
53
site/blueprints/pages/jouer.yml
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
title: Jouer
|
||||||
|
icon: play
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
# Intro
|
||||||
|
intro:
|
||||||
|
label: Introduction
|
||||||
|
icon: text
|
||||||
|
sections:
|
||||||
|
content:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
intro_title:
|
||||||
|
label: Titre
|
||||||
|
type: text
|
||||||
|
default: Jouer
|
||||||
|
intro_text:
|
||||||
|
label: Texte d'introduction
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
|
||||||
|
# Jeux
|
||||||
|
games:
|
||||||
|
label: Jeux
|
||||||
|
icon: grid
|
||||||
|
sections:
|
||||||
|
games_list:
|
||||||
|
type: pages
|
||||||
|
headline: Liste des jeux
|
||||||
|
layout: cards
|
||||||
|
size: medium
|
||||||
|
image:
|
||||||
|
cover: true
|
||||||
|
template: game
|
||||||
|
info: "{{ page.status_label }}"
|
||||||
|
create: game
|
||||||
|
|
||||||
|
# SEO
|
||||||
|
seo:
|
||||||
|
label: SEO
|
||||||
|
icon: search
|
||||||
|
sections:
|
||||||
|
meta:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
meta_title:
|
||||||
|
label: Meta Title
|
||||||
|
type: text
|
||||||
|
meta_description:
|
||||||
|
label: Meta Description
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
maxlength: 160
|
||||||
45
site/blueprints/pages/portfolio.yml
Normal file
45
site/blueprints/pages/portfolio.yml
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
title: Portfolio
|
||||||
|
icon: grid
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
content:
|
||||||
|
label: Contenu
|
||||||
|
icon: text
|
||||||
|
sections:
|
||||||
|
# Intro
|
||||||
|
intro:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
intro_title:
|
||||||
|
label: Titre
|
||||||
|
type: text
|
||||||
|
default: Portfolio
|
||||||
|
|
||||||
|
# Projets
|
||||||
|
projects_list:
|
||||||
|
type: pages
|
||||||
|
headline: Liste des projets
|
||||||
|
layout: list
|
||||||
|
size: medium
|
||||||
|
image:
|
||||||
|
cover: true
|
||||||
|
template: project
|
||||||
|
info: "{{ page.category }}"
|
||||||
|
create: project
|
||||||
|
|
||||||
|
# SEO
|
||||||
|
seo:
|
||||||
|
label: SEO
|
||||||
|
icon: search
|
||||||
|
sections:
|
||||||
|
meta:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
meta_title:
|
||||||
|
label: Meta Title
|
||||||
|
type: text
|
||||||
|
meta_description:
|
||||||
|
label: Meta Description
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
maxlength: 160
|
||||||
84
site/blueprints/pages/project.yml
Normal file
84
site/blueprints/pages/project.yml
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
title: Projet
|
||||||
|
icon: image
|
||||||
|
|
||||||
|
status:
|
||||||
|
draft:
|
||||||
|
label: Brouillon
|
||||||
|
text: Le projet n'est pas visible
|
||||||
|
unlisted:
|
||||||
|
label: Non listé
|
||||||
|
text: Le projet est accessible mais pas dans la liste
|
||||||
|
listed:
|
||||||
|
label: Publié
|
||||||
|
text: Le projet est visible publiquement
|
||||||
|
|
||||||
|
columns:
|
||||||
|
# Colonne principale
|
||||||
|
main:
|
||||||
|
width: 2/3
|
||||||
|
sections:
|
||||||
|
# Informations principales
|
||||||
|
info:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
title:
|
||||||
|
label: Nom du projet
|
||||||
|
type: text
|
||||||
|
required: true
|
||||||
|
tagline:
|
||||||
|
label: Tagline
|
||||||
|
type: text
|
||||||
|
help: "Ex: Transformez votre lecture en aventure."
|
||||||
|
description:
|
||||||
|
label: Description
|
||||||
|
type: textarea
|
||||||
|
size: medium
|
||||||
|
help: Description complète du projet
|
||||||
|
|
||||||
|
# Galerie
|
||||||
|
gallery:
|
||||||
|
type: files
|
||||||
|
headline: Galerie d'images
|
||||||
|
layout: cards
|
||||||
|
size: medium
|
||||||
|
template: image
|
||||||
|
info: "{{ file.dimensions }}"
|
||||||
|
|
||||||
|
# Sidebar
|
||||||
|
sidebar:
|
||||||
|
width: 1/3
|
||||||
|
sections:
|
||||||
|
# Métadonnées
|
||||||
|
meta:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
cover:
|
||||||
|
label: Image de couverture
|
||||||
|
type: files
|
||||||
|
max: 1
|
||||||
|
uploads:
|
||||||
|
template: image
|
||||||
|
category:
|
||||||
|
label: Catégorie
|
||||||
|
type: text
|
||||||
|
impact:
|
||||||
|
label: Impact
|
||||||
|
type: text
|
||||||
|
|
||||||
|
# Liens externes
|
||||||
|
links:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
external_links:
|
||||||
|
label: Liens externes
|
||||||
|
type: structure
|
||||||
|
fields:
|
||||||
|
link_label:
|
||||||
|
label: Nom du bouton
|
||||||
|
type: text
|
||||||
|
width: 1/2
|
||||||
|
placeholder: "Ex: App Store, Site web..."
|
||||||
|
link_url:
|
||||||
|
label: URL
|
||||||
|
type: url
|
||||||
|
width: 1/2
|
||||||
|
|
@ -1,5 +1,103 @@
|
||||||
title: Site
|
title: World Game
|
||||||
|
|
||||||
sections:
|
columns:
|
||||||
pages:
|
- width: 1/1
|
||||||
type: pages
|
sections:
|
||||||
|
pages:
|
||||||
|
type: pages
|
||||||
|
label: Réorganisation des pages
|
||||||
|
layout: list
|
||||||
|
size: small
|
||||||
|
sortable: true
|
||||||
|
create: false
|
||||||
|
status: listed
|
||||||
|
|
||||||
|
- width: 1/3
|
||||||
|
sections:
|
||||||
|
identity:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
identity_headline:
|
||||||
|
type: headline
|
||||||
|
label: Le studio
|
||||||
|
|
||||||
|
site_title:
|
||||||
|
label: Nom du site
|
||||||
|
type: text
|
||||||
|
width: 1/2
|
||||||
|
|
||||||
|
site_tagline:
|
||||||
|
label: Tagline
|
||||||
|
type: text
|
||||||
|
width: 1/2
|
||||||
|
|
||||||
|
site_description:
|
||||||
|
label: Description SEO
|
||||||
|
type: textarea
|
||||||
|
size: small
|
||||||
|
|
||||||
|
mentions_legales:
|
||||||
|
label: Mentions légales (PDF)
|
||||||
|
type: files
|
||||||
|
max: 1
|
||||||
|
width: 1/2
|
||||||
|
|
||||||
|
- width: 1/3
|
||||||
|
sections:
|
||||||
|
contact:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
contact_headline:
|
||||||
|
type: headline
|
||||||
|
label: Contact
|
||||||
|
|
||||||
|
contact_email:
|
||||||
|
label: Email
|
||||||
|
type: email
|
||||||
|
width: 1/2
|
||||||
|
|
||||||
|
contact_phone:
|
||||||
|
label: Téléphone
|
||||||
|
type: tel
|
||||||
|
width: 1/2
|
||||||
|
|
||||||
|
contact_address:
|
||||||
|
label: Adresse
|
||||||
|
type: text
|
||||||
|
width: 1/2
|
||||||
|
placeholder: 33 rue Jean Dupont
|
||||||
|
|
||||||
|
contact_postal:
|
||||||
|
label: Code postal
|
||||||
|
type: text
|
||||||
|
width: 1/2
|
||||||
|
placeholder: 75000 Paris
|
||||||
|
|
||||||
|
- width: 1/3
|
||||||
|
sections:
|
||||||
|
social:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
social_headline:
|
||||||
|
type: headline
|
||||||
|
label: Réseaux sociaux
|
||||||
|
|
||||||
|
social_linkedin:
|
||||||
|
label: LinkedIn
|
||||||
|
type: url
|
||||||
|
width: 1/2
|
||||||
|
|
||||||
|
social_twitter:
|
||||||
|
label: Twitter / X
|
||||||
|
type: url
|
||||||
|
width: 1/2
|
||||||
|
|
||||||
|
social_instagram:
|
||||||
|
label: Instagram
|
||||||
|
type: url
|
||||||
|
width: 1/2
|
||||||
|
|
||||||
|
social_youtube:
|
||||||
|
label: YouTube
|
||||||
|
type: url
|
||||||
|
width: 1/2
|
||||||
|
|
|
||||||
69
site/config/config.php
Normal file
69
site/config/config.php
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
// Debug mode (désactiver en production)
|
||||||
|
'debug' => true,
|
||||||
|
|
||||||
|
// Panel configuration
|
||||||
|
'panel' => [
|
||||||
|
// Menu personnalisé du panel
|
||||||
|
'menu' => [
|
||||||
|
'site' => [
|
||||||
|
'label' => 'Site',
|
||||||
|
'icon' => 'home',
|
||||||
|
'current' => function (string $current): bool {
|
||||||
|
return $current === 'site';
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'-', // Séparateur
|
||||||
|
'home' => [
|
||||||
|
'label' => 'Accueil',
|
||||||
|
'icon' => 'home',
|
||||||
|
'link' => 'pages/home',
|
||||||
|
],
|
||||||
|
'expertise' => [
|
||||||
|
'label' => 'Expertise',
|
||||||
|
'icon' => 'wand',
|
||||||
|
'link' => 'pages/expertise',
|
||||||
|
],
|
||||||
|
'portfolio' => [
|
||||||
|
'label' => 'Portfolio',
|
||||||
|
'icon' => 'images',
|
||||||
|
'link' => 'pages/portfolio',
|
||||||
|
],
|
||||||
|
'jouer' => [
|
||||||
|
'label' => 'Jouer',
|
||||||
|
'icon' => 'play',
|
||||||
|
'link' => 'pages/jouer',
|
||||||
|
],
|
||||||
|
'a-propos' => [
|
||||||
|
'label' => 'À propos',
|
||||||
|
'icon' => 'users',
|
||||||
|
'link' => 'pages/a-propos',
|
||||||
|
],
|
||||||
|
'blog' => [
|
||||||
|
'label' => 'Blog',
|
||||||
|
'icon' => 'text',
|
||||||
|
'link' => 'pages/blog',
|
||||||
|
],
|
||||||
|
'-', // Séparateur
|
||||||
|
'users',
|
||||||
|
'system'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
// Langues
|
||||||
|
'languages' => false, // Mettre true si multilingue activé
|
||||||
|
|
||||||
|
// Thumbs
|
||||||
|
'thumbs' => [
|
||||||
|
'srcsets' => [
|
||||||
|
'default' => [
|
||||||
|
'300w' => ['width' => 300],
|
||||||
|
'600w' => ['width' => 600],
|
||||||
|
'900w' => ['width' => 900],
|
||||||
|
'1200w' => ['width' => 1200]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
82
site/snippets/footer.php
Normal file
82
site/snippets/footer.php
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="site-footer">
|
||||||
|
<div class="site-footer__container">
|
||||||
|
<!-- Logo & Info -->
|
||||||
|
<div class="site-footer__brand">
|
||||||
|
<?php if ($logo = $site->logo()->toFile()): ?>
|
||||||
|
<img src="<?= $logo->url() ?>" alt="<?= $site->site_title() ?>" class="site-footer__logo">
|
||||||
|
<?php else: ?>
|
||||||
|
<span class="site-footer__logo-text"><?= $site->site_title() ?></span>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($site->site_tagline()->isNotEmpty()): ?>
|
||||||
|
<p class="site-footer__tagline"><?= $site->site_tagline() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Contact -->
|
||||||
|
<div class="site-footer__contact">
|
||||||
|
<?php if ($site->contact_email()->isNotEmpty()): ?>
|
||||||
|
<a href="mailto:<?= $site->contact_email() ?>" class="site-footer__email">
|
||||||
|
<?= $site->contact_email() ?>
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($site->contact_phone()->isNotEmpty()): ?>
|
||||||
|
<a href="tel:<?= $site->contact_phone() ?>" class="site-footer__phone">
|
||||||
|
<?= $site->contact_phone() ?>
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($site->contact_address()->isNotEmpty()): ?>
|
||||||
|
<address class="site-footer__address">
|
||||||
|
<?= $site->contact_address()->kt() ?>
|
||||||
|
</address>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Social Links -->
|
||||||
|
<div class="site-footer__social">
|
||||||
|
<?php if ($site->social_linkedin()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $site->social_linkedin() ?>" class="site-footer__social-link" target="_blank" rel="noopener noreferrer">
|
||||||
|
LinkedIn
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($site->social_twitter()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $site->social_twitter() ?>" class="site-footer__social-link" target="_blank" rel="noopener noreferrer">
|
||||||
|
Twitter
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($site->social_instagram()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $site->social_instagram() ?>" class="site-footer__social-link" target="_blank" rel="noopener noreferrer">
|
||||||
|
Instagram
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($site->social_youtube()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $site->social_youtube() ?>" class="site-footer__social-link" target="_blank" rel="noopener noreferrer">
|
||||||
|
YouTube
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Mentions légales -->
|
||||||
|
<?php if ($pdf = $site->mentions_legales()->toFile()): ?>
|
||||||
|
<div class="site-footer__legal">
|
||||||
|
<a href="<?= $pdf->url() ?>" target="_blank">Mentions légales</a>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Copyright -->
|
||||||
|
<div class="site-footer__copyright">
|
||||||
|
<p>© <?= date('Y') ?> <?= $site->site_title() ?>. Tous droits réservés.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- Scripts -->
|
||||||
|
<?= js('assets/js/main.js') ?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
73
site/snippets/header.php
Normal file
73
site/snippets/header.php
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="<?= $kirby->language()?->code() ?? 'fr' ?>">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title><?= $page->meta_title()->or($page->title() . ' - ' . $site->site_title()) ?></title>
|
||||||
|
<meta name="description" content="<?= $page->meta_description()->or($site->site_description()) ?>">
|
||||||
|
|
||||||
|
<!-- Favicon -->
|
||||||
|
<link rel="icon" type="image/png" href="<?= url('assets/favicon.png') ?>">
|
||||||
|
|
||||||
|
<!-- Styles -->
|
||||||
|
<?= css('assets/css/main.css') ?>
|
||||||
|
|
||||||
|
<!-- Open Graph -->
|
||||||
|
<meta property="og:title" content="<?= $page->meta_title()->or($page->title()) ?>">
|
||||||
|
<meta property="og:description" content="<?= $page->meta_description()->or($site->site_description()) ?>">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:url" content="<?= $page->url() ?>">
|
||||||
|
<?php if ($cover = $page->cover()->toFile()): ?>
|
||||||
|
<meta property="og:image" content="<?= $cover->url() ?>">
|
||||||
|
<?php endif ?>
|
||||||
|
</head>
|
||||||
|
<body class="template-<?= $page->template() ?>">
|
||||||
|
<!-- Header -->
|
||||||
|
<header class="site-header">
|
||||||
|
<div class="site-header__container">
|
||||||
|
<!-- Logo -->
|
||||||
|
<a href="<?= $site->url() ?>" class="site-header__logo">
|
||||||
|
<?php if ($logo = $site->logo()->toFile()): ?>
|
||||||
|
<img src="<?= $logo->url() ?>" alt="<?= $site->site_title() ?>">
|
||||||
|
<?php else: ?>
|
||||||
|
<span class="site-header__logo-text"><?= $site->site_title() ?></span>
|
||||||
|
<?php endif ?>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<!-- Navigation -->
|
||||||
|
<nav class="site-header__nav">
|
||||||
|
<ul class="site-nav">
|
||||||
|
<?php foreach ($site->main_navigation()->toStructure() as $item): ?>
|
||||||
|
<?php $linkedPage = $item->link()->toPages()->first() ?>
|
||||||
|
<?php if ($linkedPage): ?>
|
||||||
|
<li class="site-nav__item <?= $linkedPage->isOpen() ? 'is-active' : '' ?>">
|
||||||
|
<a href="<?= $linkedPage->url() ?>">
|
||||||
|
<?= $kirby->language()?->code() === 'en' ? $item->label_en() : $item->label_fr() ?>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<?php endif ?>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Language Switcher -->
|
||||||
|
<?php if ($kirby->languages()->count() > 1): ?>
|
||||||
|
<div class="site-header__lang">
|
||||||
|
<?php foreach ($kirby->languages() as $lang): ?>
|
||||||
|
<a href="<?= $page->url($lang->code()) ?>"
|
||||||
|
class="site-lang__link <?= $lang->code() === $kirby->language()?->code() ? 'is-active' : '' ?>">
|
||||||
|
<?= strtoupper($lang->code()) ?>
|
||||||
|
</a>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Mobile Menu Toggle -->
|
||||||
|
<button class="site-header__toggle" aria-label="Menu">
|
||||||
|
<span></span>
|
||||||
|
<span></span>
|
||||||
|
<span></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
81
site/templates/about.php
Normal file
81
site/templates/about.php
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
<?php snippet('header') ?>
|
||||||
|
|
||||||
|
<main class="about">
|
||||||
|
<!-- Intro Section -->
|
||||||
|
<section class="about__intro">
|
||||||
|
<h1 class="about__title"><?= $page->intro_title() ?></h1>
|
||||||
|
|
||||||
|
<?php if ($page->intro_text()->isNotEmpty()): ?>
|
||||||
|
<p class="about__subtitle"><?= $page->intro_text() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Mission Section -->
|
||||||
|
<?php if ($page->mission_text()->isNotEmpty()): ?>
|
||||||
|
<section class="about__mission">
|
||||||
|
<h2 class="about__section-title"><?= $page->mission_title() ?></h2>
|
||||||
|
<div class="about__section-content">
|
||||||
|
<?= $page->mission_text()->toBlocks() ?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Manifesto Section -->
|
||||||
|
<?php if ($page->manifesto_text()->isNotEmpty()): ?>
|
||||||
|
<section class="about__manifesto">
|
||||||
|
<h2 class="about__section-title"><?= $page->manifesto_title() ?></h2>
|
||||||
|
<div class="about__section-content">
|
||||||
|
<?= $page->manifesto_text()->toBlocks() ?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Team Section -->
|
||||||
|
<?php if ($page->team_members()->isNotEmpty()): ?>
|
||||||
|
<section class="about__team">
|
||||||
|
<h2 class="about__section-title"><?= $page->team_title() ?></h2>
|
||||||
|
|
||||||
|
<div class="about__team-grid">
|
||||||
|
<?php foreach ($page->team_members()->toStructure() as $member): ?>
|
||||||
|
<article class="team-card">
|
||||||
|
<?php if ($photo = $member->photo()->toFile()): ?>
|
||||||
|
<div class="team-card__photo">
|
||||||
|
<img src="<?= $photo->url() ?>" alt="<?= $member->name() ?>">
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<div class="team-card__info">
|
||||||
|
<h3 class="team-card__name"><?= $member->name() ?></h3>
|
||||||
|
<p class="team-card__role"><?= $member->role() ?></p>
|
||||||
|
|
||||||
|
<?php if ($member->bio()->isNotEmpty()): ?>
|
||||||
|
<p class="team-card__bio"><?= $member->bio() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<div class="team-card__social">
|
||||||
|
<?php if ($member->linkedin()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $member->linkedin() ?>" target="_blank" class="team-card__social-link">
|
||||||
|
LinkedIn
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($member->twitter()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $member->twitter() ?>" target="_blank" class="team-card__social-link">
|
||||||
|
Twitter
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav class="about__team-nav">
|
||||||
|
<button class="about__team-prev">← Précédent</button>
|
||||||
|
<button class="about__team-next">Suivant →</button>
|
||||||
|
</nav>
|
||||||
|
</section>
|
||||||
|
<?php endif ?>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php snippet('footer') ?>
|
||||||
101
site/templates/article.php
Normal file
101
site/templates/article.php
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
<?php snippet('header') ?>
|
||||||
|
|
||||||
|
<main class="article">
|
||||||
|
<article class="article__content">
|
||||||
|
<!-- Header -->
|
||||||
|
<header class="article__header">
|
||||||
|
<?php if ($page->date()->isNotEmpty()): ?>
|
||||||
|
<time class="article__date" datetime="<?= $page->date()->toDate('Y-m-d') ?>">
|
||||||
|
Publié le <?= $page->date()->toDate('d/m/Y') ?>
|
||||||
|
</time>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<h1 class="article__title"><?= $page->title() ?></h1>
|
||||||
|
|
||||||
|
<?php if ($page->intro()->isNotEmpty()): ?>
|
||||||
|
<p class="article__intro"><?= $page->intro() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<!-- Author -->
|
||||||
|
<?php if ($page->author_name()->isNotEmpty()): ?>
|
||||||
|
<div class="article__author">
|
||||||
|
<?php if ($photo = $page->author_photo()->toFile()): ?>
|
||||||
|
<img src="<?= $photo->url() ?>" alt="<?= $page->author_name() ?>" class="article__author-photo">
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<div class="article__author-info">
|
||||||
|
<span class="article__author-name"><?= $page->author_name() ?></span>
|
||||||
|
<?php if ($page->author_role()->isNotEmpty()): ?>
|
||||||
|
<span class="article__author-role"><?= $page->author_role() ?></span>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Cover Image -->
|
||||||
|
<?php if ($cover = $page->cover()->toFile()): ?>
|
||||||
|
<figure class="article__cover">
|
||||||
|
<img src="<?= $cover->url() ?>" alt="<?= $page->title() ?>">
|
||||||
|
</figure>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Content -->
|
||||||
|
<div class="article__body">
|
||||||
|
<?= $page->article_content()->toBlocks() ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Tags -->
|
||||||
|
<?php if ($page->tags()->isNotEmpty()): ?>
|
||||||
|
<div class="article__tags">
|
||||||
|
<?php foreach ($page->tags()->split() as $tag): ?>
|
||||||
|
<span class="article__tag"><?= $tag ?></span>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<!-- Recommendations -->
|
||||||
|
<?php
|
||||||
|
$related = $page->related_articles()->toPages();
|
||||||
|
if ($related->isEmpty()) {
|
||||||
|
$related = $page->siblings()->listed()->not($page)->shuffle()->limit(3);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php if ($related->isNotEmpty()): ?>
|
||||||
|
<section class="article__recommendations">
|
||||||
|
<h2 class="article__recommendations-title">Nos recommandations</h2>
|
||||||
|
<a href="<?= $page->parent()->url() ?>" class="article__recommendations-link">Voir tous les articles →</a>
|
||||||
|
|
||||||
|
<div class="article__recommendations-grid">
|
||||||
|
<?php foreach ($related as $rec): ?>
|
||||||
|
<article class="recommendation-card">
|
||||||
|
<?php if ($cover = $rec->cover()->toFile()): ?>
|
||||||
|
<div class="recommendation-card__cover">
|
||||||
|
<img src="<?= $cover->thumb(['width' => 400])->url() ?>" alt="<?= $rec->title() ?>">
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($rec->category()->isNotEmpty()): ?>
|
||||||
|
<span class="recommendation-card__category"><?= $rec->category() ?></span>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<h3 class="recommendation-card__title">
|
||||||
|
<a href="<?= $rec->url() ?>"><?= $rec->title() ?></a>
|
||||||
|
</h3>
|
||||||
|
</article>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Navigation -->
|
||||||
|
<nav class="article__nav">
|
||||||
|
<a href="<?= $page->parent()->url() ?>" class="article__nav-back">
|
||||||
|
← Tous les articles
|
||||||
|
</a>
|
||||||
|
</nav>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php snippet('footer') ?>
|
||||||
61
site/templates/blog.php
Normal file
61
site/templates/blog.php
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
<?php snippet('header') ?>
|
||||||
|
|
||||||
|
<main class="blog">
|
||||||
|
<!-- Intro Section -->
|
||||||
|
<section class="blog__intro">
|
||||||
|
<h1 class="blog__title"><?= $page->intro_title() ?></h1>
|
||||||
|
|
||||||
|
<?php if ($page->intro_text()->isNotEmpty()): ?>
|
||||||
|
<p class="blog__subtitle"><?= $page->intro_text() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Articles List -->
|
||||||
|
<section class="blog__articles">
|
||||||
|
<?php foreach ($page->children()->listed()->sortBy('date', 'desc') as $article): ?>
|
||||||
|
<article class="article-card">
|
||||||
|
<!-- Date -->
|
||||||
|
<?php if ($article->date()->isNotEmpty()): ?>
|
||||||
|
<time class="article-card__date" datetime="<?= $article->date()->toDate('Y-m-d') ?>">
|
||||||
|
<?= $article->date()->toDate('d/m/Y') ?>
|
||||||
|
</time>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Content -->
|
||||||
|
<div class="article-card__content">
|
||||||
|
<h2 class="article-card__title">
|
||||||
|
<a href="<?= $article->url() ?>"><?= $article->title() ?></a>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<?php if ($article->intro()->isNotEmpty()): ?>
|
||||||
|
<p class="article-card__intro"><?= $article->intro()->excerpt(200) ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<a href="<?= $article->url() ?>" class="article-card__link">
|
||||||
|
Lire la suite →
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Author -->
|
||||||
|
<div class="article-card__author">
|
||||||
|
<?php if ($photo = $article->author_photo()->toFile()): ?>
|
||||||
|
<img src="<?= $photo->url() ?>" alt="<?= $article->author_name() ?>" class="article-card__author-photo">
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($article->author_name()->isNotEmpty()): ?>
|
||||||
|
<span class="article-card__author-name"><?= $article->author_name() ?></span>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Cover Image -->
|
||||||
|
<?php if ($cover = $article->cover()->toFile()): ?>
|
||||||
|
<div class="article-card__cover">
|
||||||
|
<img src="<?= $cover->url() ?>" alt="<?= $article->title() ?>">
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
</article>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php snippet('footer') ?>
|
||||||
36
site/templates/expertise.php
Normal file
36
site/templates/expertise.php
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?php snippet('header') ?>
|
||||||
|
|
||||||
|
<main class="expertise">
|
||||||
|
<!-- Intro Section -->
|
||||||
|
<section class="expertise__intro">
|
||||||
|
<h1 class="expertise__title"><?= $page->intro_title() ?></h1>
|
||||||
|
|
||||||
|
<?php if ($page->intro_text()->isNotEmpty()): ?>
|
||||||
|
<p class="expertise__text"><?= $page->intro_text() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Expertise Sections -->
|
||||||
|
<?php if ($page->expertise_sections()->isNotEmpty()): ?>
|
||||||
|
<div class="expertise__sections">
|
||||||
|
<?php foreach ($page->expertise_sections()->toStructure() as $section): ?>
|
||||||
|
<section class="expertise-section expertise-section--<?= $section->icon() ?>">
|
||||||
|
<h2 class="expertise-section__title"><?= $section->title() ?></h2>
|
||||||
|
<div class="expertise-section__content">
|
||||||
|
<?= $section->content()->toBlocks() ?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Objective Section -->
|
||||||
|
<?php if ($page->objective_text()->isNotEmpty()): ?>
|
||||||
|
<section class="expertise__objective">
|
||||||
|
<h2 class="expertise__objective-title"><?= $page->objective_title() ?></h2>
|
||||||
|
<p class="expertise__objective-text"><?= $page->objective_text() ?></p>
|
||||||
|
</section>
|
||||||
|
<?php endif ?>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php snippet('footer') ?>
|
||||||
58
site/templates/game.php
Normal file
58
site/templates/game.php
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?php snippet('header') ?>
|
||||||
|
|
||||||
|
<main class="game">
|
||||||
|
<article class="game__content">
|
||||||
|
<!-- Info -->
|
||||||
|
<div class="game__info">
|
||||||
|
<h1 class="game__title"><?= $page->title() ?></h1>
|
||||||
|
|
||||||
|
<?php if ($page->description()->isNotEmpty()): ?>
|
||||||
|
<p class="game__description"><?= $page->description() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<?php if ($page->rules()->isNotEmpty()): ?>
|
||||||
|
<div class="game__rules">
|
||||||
|
<?= $page->rules()->toBlocks() ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Status Button -->
|
||||||
|
<?php if ($page->game_status()->value() !== 'available'): ?>
|
||||||
|
<div class="game__status">
|
||||||
|
<span class="btn btn--disabled">
|
||||||
|
<?= $page->game_status()->value() === 'coming_soon' ? 'Bientôt disponible' : 'En maintenance' ?>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Game Area -->
|
||||||
|
<div class="game__area">
|
||||||
|
<?php if ($page->game_status()->value() === 'available'): ?>
|
||||||
|
<?php if ($page->is_embedded()->toBool() && $page->play_link()->isNotEmpty()): ?>
|
||||||
|
<iframe src="<?= $page->play_link() ?>" class="game__iframe" frameborder="0"></iframe>
|
||||||
|
<?php elseif ($page->play_link()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $page->play_link() ?>" class="game__external-link btn btn--large" target="_blank">
|
||||||
|
Jouer maintenant
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($cover = $page->cover()->toFile()): ?>
|
||||||
|
<div class="game__cover">
|
||||||
|
<img src="<?= $cover->url() ?>" alt="<?= $page->title() ?>">
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<!-- Back Navigation -->
|
||||||
|
<nav class="game__nav">
|
||||||
|
<a href="<?= $page->parent()->url() ?>" class="game__nav-back">
|
||||||
|
← Retour aux jeux
|
||||||
|
</a>
|
||||||
|
</nav>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php snippet('footer') ?>
|
||||||
49
site/templates/home.php
Normal file
49
site/templates/home.php
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
<?php snippet('header') ?>
|
||||||
|
|
||||||
|
<main class="home">
|
||||||
|
<!-- Hero Section -->
|
||||||
|
<section class="hero">
|
||||||
|
<div class="hero__content">
|
||||||
|
<h1 class="hero__title">
|
||||||
|
<?php
|
||||||
|
$title = $page->hero_title()->value();
|
||||||
|
$highlight = $page->hero_title_highlight()->value();
|
||||||
|
if ($highlight) {
|
||||||
|
echo str_replace($highlight, '<span class="highlight">' . $highlight . '</span>', $title);
|
||||||
|
} else {
|
||||||
|
echo $title;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<?php if ($page->hero_subtitle()->isNotEmpty()): ?>
|
||||||
|
<p class="hero__subtitle"><?= $page->hero_subtitle() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($page->hero_cta_text()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $page->hero_cta_link()->toPage()?->url() ?? '#' ?>" class="hero__cta btn">
|
||||||
|
<?= $page->hero_cta_text() ?>
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php if ($hero = $page->hero_image()->toFile()): ?>
|
||||||
|
<div class="hero__image">
|
||||||
|
<img src="<?= $hero->url() ?>" alt="<?= $page->hero_title() ?>">
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Floating Bubbles -->
|
||||||
|
<?php if ($page->floating_bubbles()->isNotEmpty()): ?>
|
||||||
|
<div class="hero__bubbles">
|
||||||
|
<?php foreach ($page->floating_bubbles()->toStructure() as $bubble): ?>
|
||||||
|
<div class="bubble bubble--<?= $bubble->position() ?>">
|
||||||
|
<?= $bubble->text() ?>
|
||||||
|
</div>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php snippet('footer') ?>
|
||||||
57
site/templates/jouer.php
Normal file
57
site/templates/jouer.php
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
<?php snippet('header') ?>
|
||||||
|
|
||||||
|
<main class="jouer">
|
||||||
|
<!-- Intro Section -->
|
||||||
|
<section class="jouer__intro">
|
||||||
|
<?php if ($page->intro_title()->isNotEmpty()): ?>
|
||||||
|
<h1 class="jouer__title"><?= $page->intro_title() ?></h1>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($page->intro_text()->isNotEmpty()): ?>
|
||||||
|
<p class="jouer__text"><?= $page->intro_text() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Games List -->
|
||||||
|
<section class="jouer__games">
|
||||||
|
<?php foreach ($page->children()->listed() as $game): ?>
|
||||||
|
<article class="game-card">
|
||||||
|
<!-- Badge -->
|
||||||
|
<?php if ($game->badge()->isNotEmpty() && $game->badge()->value() !== 'none'): ?>
|
||||||
|
<span class="game-card__badge game-card__badge--<?= $game->badge() ?>">
|
||||||
|
<?= $game->badge()->value() === 'new' ? 'NEW' : ($game->badge()->value() === 'coming_soon' ? 'INCOMING' : $game->badge()) ?>
|
||||||
|
</span>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Cover -->
|
||||||
|
<?php if ($cover = $game->cover()->toFile()): ?>
|
||||||
|
<div class="game-card__cover">
|
||||||
|
<img src="<?= $cover->url() ?>" alt="<?= $game->title() ?>">
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Info -->
|
||||||
|
<div class="game-card__info">
|
||||||
|
<h2 class="game-card__title"><?= $game->title() ?></h2>
|
||||||
|
|
||||||
|
<?php if ($game->description()->isNotEmpty()): ?>
|
||||||
|
<p class="game-card__description"><?= $game->description() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Play Button -->
|
||||||
|
<?php if ($game->game_status()->value() === 'available'): ?>
|
||||||
|
<a href="<?= $game->url() ?>" class="game-card__play btn">
|
||||||
|
Jouer
|
||||||
|
</a>
|
||||||
|
<?php else: ?>
|
||||||
|
<span class="game-card__status btn btn--disabled">
|
||||||
|
Bientôt disponible
|
||||||
|
</span>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php snippet('footer') ?>
|
||||||
109
site/templates/portfolio.php
Normal file
109
site/templates/portfolio.php
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
<?php snippet('header') ?>
|
||||||
|
|
||||||
|
<main class="portfolio">
|
||||||
|
<!-- Intro Section -->
|
||||||
|
<section class="portfolio__intro">
|
||||||
|
<?php if ($page->intro_title()->isNotEmpty()): ?>
|
||||||
|
<h1 class="portfolio__title"><?= $page->intro_title() ?></h1>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($page->intro_text()->isNotEmpty()): ?>
|
||||||
|
<p class="portfolio__text"><?= $page->intro_text() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Projects Grid -->
|
||||||
|
<section class="portfolio__projects">
|
||||||
|
<?php
|
||||||
|
$projects = $page->children()->listed();
|
||||||
|
$total = $projects->count();
|
||||||
|
$index = 0;
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php foreach ($projects as $project): ?>
|
||||||
|
<?php $index++ ?>
|
||||||
|
<article class="project-card" data-index="<?= $index ?>">
|
||||||
|
<!-- Project Gallery -->
|
||||||
|
<div class="project-card__gallery">
|
||||||
|
<?php if ($cover = $project->cover()->toFile()): ?>
|
||||||
|
<img src="<?= $cover->url() ?>" alt="<?= $project->title() ?>" class="project-card__cover">
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php foreach ($project->files()->filterBy('template', 'image')->limit(5) as $image): ?>
|
||||||
|
<img src="<?= $image->url() ?>" alt="" class="project-card__image">
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Project Info -->
|
||||||
|
<div class="project-card__info">
|
||||||
|
<h2 class="project-card__title"><?= $project->title() ?></h2>
|
||||||
|
|
||||||
|
<?php if ($project->tagline()->isNotEmpty()): ?>
|
||||||
|
<p class="project-card__tagline"><?= $project->tagline() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($project->description()->isNotEmpty()): ?>
|
||||||
|
<p class="project-card__description"><?= $project->description() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Meta -->
|
||||||
|
<div class="project-card__meta">
|
||||||
|
<?php if ($project->impact()->isNotEmpty()): ?>
|
||||||
|
<div class="project-card__impact">
|
||||||
|
<span class="label">Impact:</span>
|
||||||
|
<?= $project->impact()->join(', ') ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($project->category()->isNotEmpty()): ?>
|
||||||
|
<div class="project-card__category">
|
||||||
|
<span class="label">Catégorie:</span>
|
||||||
|
<?= $project->category()->value() ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($project->platforms()->isNotEmpty()): ?>
|
||||||
|
<div class="project-card__platforms">
|
||||||
|
<span class="label">Plateformes:</span>
|
||||||
|
<?= $project->platforms()->join(' / ') ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Links -->
|
||||||
|
<div class="project-card__links">
|
||||||
|
<?php if ($project->apple_link()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $project->apple_link() ?>" class="btn btn--apple" target="_blank">
|
||||||
|
Apple
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($project->android_link()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $project->android_link() ?>" class="btn btn--android" target="_blank">
|
||||||
|
Android
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Counter -->
|
||||||
|
<div class="project-card__counter">
|
||||||
|
<?= str_pad($index, 2, '0', STR_PAD_LEFT) ?>/<?= str_pad($total, 2, '0', STR_PAD_LEFT) ?>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Thumbnails Navigation -->
|
||||||
|
<nav class="portfolio__thumbnails">
|
||||||
|
<?php foreach ($projects as $project): ?>
|
||||||
|
<a href="#<?= $project->slug() ?>" class="portfolio__thumbnail">
|
||||||
|
<?php if ($cover = $project->cover()->toFile()): ?>
|
||||||
|
<img src="<?= $cover->thumb(['width' => 100])->url() ?>" alt="<?= $project->title() ?>">
|
||||||
|
<?php endif ?>
|
||||||
|
</a>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</nav>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php snippet('footer') ?>
|
||||||
104
site/templates/project.php
Normal file
104
site/templates/project.php
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
<?php snippet('header') ?>
|
||||||
|
|
||||||
|
<main class="project">
|
||||||
|
<article class="project__content">
|
||||||
|
<!-- Gallery -->
|
||||||
|
<div class="project__gallery">
|
||||||
|
<?php if ($cover = $page->cover()->toFile()): ?>
|
||||||
|
<img src="<?= $cover->url() ?>" alt="<?= $page->title() ?>" class="project__cover">
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php foreach ($page->files()->filterBy('template', 'image') as $image): ?>
|
||||||
|
<img src="<?= $image->url() ?>" alt="" class="project__image">
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Info -->
|
||||||
|
<div class="project__info">
|
||||||
|
<h1 class="project__title"><?= $page->title() ?></h1>
|
||||||
|
|
||||||
|
<?php if ($page->tagline()->isNotEmpty()): ?>
|
||||||
|
<p class="project__tagline"><?= $page->tagline() ?></p>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($page->description()->isNotEmpty()): ?>
|
||||||
|
<div class="project__description">
|
||||||
|
<?= $page->description()->kt() ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<!-- Meta -->
|
||||||
|
<div class="project__meta">
|
||||||
|
<?php if ($page->impact()->isNotEmpty()): ?>
|
||||||
|
<div class="project__impact">
|
||||||
|
<span class="label">Impact:</span>
|
||||||
|
<?= $page->impact()->join(', ') ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($page->category()->isNotEmpty()): ?>
|
||||||
|
<div class="project__category">
|
||||||
|
<span class="label">Catégorie:</span>
|
||||||
|
<?= $page->category()->value() ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($page->platforms()->isNotEmpty()): ?>
|
||||||
|
<div class="project__platforms">
|
||||||
|
<span class="label">Plateformes:</span>
|
||||||
|
<?= $page->platforms()->join(' / ') ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($page->client_name()->isNotEmpty()): ?>
|
||||||
|
<div class="project__client">
|
||||||
|
<span class="label">Client:</span>
|
||||||
|
<?= $page->client_name() ?>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Links -->
|
||||||
|
<div class="project__links">
|
||||||
|
<?php if ($page->apple_link()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $page->apple_link() ?>" class="btn btn--apple" target="_blank">
|
||||||
|
App Store
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($page->android_link()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $page->android_link() ?>" class="btn btn--android" target="_blank">
|
||||||
|
Play Store
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if ($page->web_link()->isNotEmpty()): ?>
|
||||||
|
<a href="<?= $page->web_link() ?>" class="btn btn--web" target="_blank">
|
||||||
|
Voir le site
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<!-- Navigation -->
|
||||||
|
<nav class="project__nav">
|
||||||
|
<?php if ($prev = $page->prev()): ?>
|
||||||
|
<a href="<?= $prev->url() ?>" class="project__nav-prev">
|
||||||
|
← <?= $prev->title() ?>
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
|
<a href="<?= $page->parent()->url() ?>" class="project__nav-back">
|
||||||
|
Tous les projets
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<?php if ($next = $page->next()): ?>
|
||||||
|
<a href="<?= $next->url() ?>" class="project__nav-next">
|
||||||
|
<?= $next->title() ?> →
|
||||||
|
</a>
|
||||||
|
<?php endif ?>
|
||||||
|
</nav>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php snippet('footer') ?>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue