initial commit

This commit is contained in:
isUnknown 2026-02-09 08:36:12 +01:00
commit 9439de0603
600 changed files with 124248 additions and 0 deletions

0
site/accounts/index.html Normal file
View file

View file

View file

@ -0,0 +1,9 @@
title: Agence
icon: home
sections:
intro:
type: fields
fields:
presentation:
type: textarea

View file

@ -0,0 +1,8 @@
title: Default Page
preset: page
fields:
text:
label: Text
type: textarea
size: large

View file

@ -0,0 +1,9 @@
title: Accueil
icon: layers
sections:
projets:
label: Projets
type: pages
layout: cards
create: project

View file

@ -0,0 +1,156 @@
title: Projet
tabs:
main:
label: Présentation
icon: page
columns:
cover:
width: 1/2
sections:
project:
label: Projet
type: fields
fields:
coverImage:
label: Image principale*
type: files
layout: cards
max: 1
help: *Utilisée en vue liste.
size: medium
covercaption:
label: Légende de l'image principale
type: text
width: 1/2
major:
label: Projet principal* ?
help: *Affiché sur la page agence.
type: toggle
default: false
width: 1/2
text:
- non
- oui
content:
width: 1/2
sections:
projectcontent:
label: Projet
type: fields
fields:
intro:
label: Présentation
type: textarea
help: Texte également utilisé par les moteurs de recherche. Veillez à présenter d'emblée les éléments principaux du projet.
counter: true
recap:
label: Fiche technique
icon: book
sections:
infos:
label: Informations
type: fields
fields:
ref:
label: Référence
type: text
width: 1/2
placeholder: ARX
place:
label: Emplacement
type: text
width: 1/2
placeholder: Paris, France
start:
label: Date de début
type: text
width: 1/2
placeholder: 2018
end:
label: Date de fin
type: text
width: 1/2
placeholder: 2020
architects:
label: Maîtrise d'œuvre
type: text
width: 1/2
placeholder: Data mandataire
be:
label: Bureaux d'étude
type: text
width: 1/2
placeholder: Elioth
pgm:
label: Type de programme
type: text
width: 1/2
placeholder: Logements
credits:
label: Crédits visuels
type: text
width: 1/2
placeholder: Auteur.e.s des visuels
mo:
label: Maîtrise d'ouvrage
type: text
width: 1/2
placeholder: Semapa
size:
label: Surface
type: text
width: 1/2
placeholder: 35 000 m2
budget:
type: text
width: 1/2
placeholder: 45M €
state:
label: Statut
type: text
width: 1/2
placeholder: Livré
gallery:
label: Galerie
icon: file-image
sections:
pictures:
label: Images
type: fields
fields:
blocks:
label: Galerie
type: structure
columns:
pic:
width: 1/4
caption:
width: 1/4
home:
width: 1/5
project:
width: 1/5
fields:
pic:
label: Image
type: files
max: 1
layout: cards
size: medium
width: 1/4
caption:
label: Légende
type: textarea
buttons: false
width: 1/4
home:
label: Afficher sur l'accueil
type: toggle
default: true
width: 1/4
project:
label: Afficher sur la page projet
type: toggle
width: 1/4

76
site/blueprints/site.yml Normal file
View file

@ -0,0 +1,76 @@
title: Site
tabs:
projects:
label: Projets
icon: layers
columns:
left:
width: 1/4
sections:
displaySection:
type: fields
fields:
orderProjects:
label: Mode d'affichage
type: toggle
text: ['Aléatoire', 'Ordonné']
help: En mode "Ordonné", les images de la page d'accueil respectent l'ordre ci-contre et celui des images des pages projets (image principale puis ordre de la galerie).
right:
width: 3/4
sections:
projectsSection:
headline: Projets
type: pages
label: Projets
layout: cards
image:
back: white
template:
- project
agency:
label: Agence
icon: home
sections:
agencySection:
headline: Agence
type: fields
fields:
presentation:
type: textarea
autofocus: true
site:
icon: cog
columns:
- width: 1/2
sections:
logoSection:
headline: Logo
type: fields
fields:
logoImg:
label: Logo
type: files
max: 1
layout: cards
size: medium
help: Utilisée pour les partages sur les réseaux sociaux.
- width: 1/2
sections:
seoSection:
headline: SEO
type: fields
fields:
favicon:
type: files
max: 1
layout: cards
size: small
help: Affichée dans au niveau de l'onglet du navigateur.
description:
type: textarea
help: Texte utilisé par les moteurs de recherche. 160 caractères max.
maxlength: 200
autofocus: true

0
site/cache/index.html vendored Normal file
View file

45
site/config/config.php Normal file
View file

@ -0,0 +1,45 @@
<?php
return [
'debug' => true,
'routes' => [
[
'pattern' => 'sitemap.xml',
'action' => function() {
$pages = site()->pages()->index();
// fetch the pages to ignore from the config settings,
// if nothing is set, we ignore the error page
$ignore = kirby()->option('sitemap.ignore', ['error']);
$content = snippet('sitemap', compact('pages', 'ignore'), true);
// return response with correct header type
return new Kirby\Cms\Response($content, 'application/xml');
}
],
[
'pattern' => 'sitemap',
'action' => function() {
return go('sitemap.xml', 301);
}
]
],
'thumbs' => [
'srcsets' => [
'default' => [
'450w' => ['width' => 450, 'quality' => 90],
'800w' => ['width' => 800, 'quality' => 90],
'1024w' => ['width' => 900, 'quality' => 90],
'1440w' => ['width' => 1200, 'quality' => 90],
'2048w' => ['width' => 1700, 'quality' => 90],
'2900w' => ['width' => 2500, 'quality' => 90],
'3000w' => ['width' => 2800, 'quality' => 90],
'3500w' => ['width' => 3000, 'quality' => 90],
'4000w' => ['width' => 3500, 'quality' => 90],
'4500w' => ['width' => 4000, 'quality' => 90],
'5000w' => ['width' => 4500, 'quality' => 90]
]
]
]
];

0
site/sessions/index.html Normal file
View file

30
site/snippets/header.php Normal file
View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title data-url="<?= $site->url() ?>">DATA Architectes</title>
<link rel="stylesheet" href="/assets/style.css">
<link rel="stylesheet" href="https://unpkg.com/swiper@6/swiper-bundle.min.css">
<link rel="icon" type="image/png" href="<?= $site->favicon()->toFile()->url() ?>" />
<meta description="<?php
if($page->intro()->isNotEmpty()) {
echo $page->intro();
} else {
echo $site->description();
}
?>">
<meta property='og:title' content='Data architectes' />
<meta property='og:type' content='website' />
<meta property='og:url' content='<?= $site->url() ?>' />
<meta property='og:image' content='<?= $site->Logoimg()->toFile()->url() ?>' />
<meta property='og:description' content='<?= $site->description() ?>' />
<meta name='twitter:title' content='Data architectes' />
<meta name='twitter:description' content='<?= $site->description() ?>' />
<meta name='twitter:card' content='summary_large_image' />
<meta name='twitter:image' content='<?= $site->Logoimg()->toFile()->url() ?>'>
</head>
<body>

0
site/snippets/index.html Normal file
View file

11
site/snippets/sitemap.php Normal file
View file

@ -0,0 +1,11 @@
<?= '<?xml version="1.0" encoding="utf-8"?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php foreach ($pages as $p): ?>
<?php if (in_array($p->uri(), $ignore)) continue ?>
<url>
<loc><?= html($p->url()) ?></loc>
<lastmod><?= $p->modified('c', 'date') ?></lastmod>
<priority><?= ($p->isHomePage()) ? 1 : number_format(0.5 / $p->depth(), 1) ?></priority>
</url>
<?php endforeach ?>
</urlset>

43
site/templates/agency.php Normal file
View file

@ -0,0 +1,43 @@
<?= snippet('header') ?>
<header class="header">
<h1 class="header__logo" data-title="<?= $site->title() ?>">INFO</h1>
<div class="header__views views header__views--unvisible" style="opacity: 1">
<button class="views__btn views__btn--close" style="display: block">
<img src="<?= $kirby->url('assets') ?>/svg/close.svg" alt="">
</button>
</div>
</header>
<div class="wrapper">
<div class="agency">
<section class="agency__presentation"><?= $site->presentation()->kt() ?></section>
<section class="agency__projects">
<h1 class="majorProjects">Projets principaux</h1>
<?php foreach ($site->children()->sortBy('start', 'desc') as $project): ?>
<?php if ($project->major() == 'true'): ?>
<?php if ($project->start()->isNotEmpty() && $project->end()->isNotEmpty()) :?>
<?= $project->start() ?> - <?= $project->end() ?> <?= $project->title() ?><br />
<?php else : ?>
<?= $project->start() ?><?= $project->end() ?> <?= $project->title() ?><br />
<?php endif ?>
<?php endif ?>
<?php endforeach ?>
</section>
</div>
</div>
<script>
history.pushState(null, '<?= $site->title() ?>', '<?= $site->url() ?>')
history.pushState(null, '<?= $page->title() ?>', '<?= $page->url() ?>')
window.onpopstate = function() {
window.location.href = window.location.href
}
document.querySelector('.views__btn--close').addEventListener('click', () => {
document.location.replace('<?= $site->url() ?>')
})
</script>
</body>
</html>

View file

@ -0,0 +1 @@
<h1><?= $page->title() ?></h1>

131
site/templates/home.php Normal file
View file

@ -0,0 +1,131 @@
<?= snippet('header') ?>
<header class="header">
<a class="logoBtn" href="<?= $site->find('agence')->url() ?>"><h1 class="header__logo header__logo--big">DATA</h1></a>
<div class="header__views views">
<button class="views__btn views__btn--smaller">
<img src="./assets/svg/smaller.svg" />
</button>
<button class="views__btn views__btn--bigger">
<img src="./assets/svg/bigger.svg" />
</button>
<button class="views__btn views__btn--close hide">
<img src="./assets/svg/close.svg" alt="">
</button>
<button class="views__btn--mobile hide">
<h1>Liste</h1>
</button>
</div>
</header>
<section class="grid grid--5">
<?php
$allBlocks = [];
foreach($site->children()->listed() as $project) {
if ($project->coverImage()->isNotEmpty()) {
$block = [
"pic" => $project->coverImage()->toFile(),
"projectTitle" => $project->title(),
"caption" => $project->coverCaption(),
"link" => $project->url(),
"showHome" => 'true',
"ref" => $project->ref()
];
array_push($allBlocks, $block);
};
if ($project->blocks()->isNotEmpty()) {
$pictures = $project->blocks()->toStructure();
foreach ($pictures as $picture) {
if ($picture->home() == "true") {
$block = [
"pic" => $picture->pic()->toFile(),
"projectTitle" => $project->title(),
"caption" => $picture->caption(),
"link" => $project->url(),
"ref" => $project->ref()
];
array_push($allBlocks, $block);
}
}
}
};
if ($site->orderprojects() == 'false') shuffle($allBlocks);
foreach($allBlocks as $block) {
echo '<a class="toProject toProject--wait" data-title="' . $block["projectTitle"] . '" href="' . $block["link"] . '">';
echo '<figure class="block hide">';
echo "<img class=\"block__image\" src=\""
. $block["pic"]->url()
. "\" loading=\"lazy\" srcset=\"" . $block["pic"]->srcset() . "\" />";
echo '<figcaption class="block__caption">' . '<span class="block__ref">' . $block["ref"] . '</span> ' . $block["caption"] . '</figcation>';
echo '</figure>';
echo "</a>";
}
?>
</section>
<section class="project hide" style="display: none"></section>
<section class="list hide" style ="display: none">
<?php
foreach ($site->children()->sortBy('end', 'desc', 'start', 'desc') as $project) {
if ($project->coverImage()->isNotEmpty()) {
echo '<a class="list__project projectLine" href="' . $project->url() . '">';
echo '<div class="projectLine__cell projectLine__cell--image cell"><img class="cell__image" src="' . $project->coverImage()->toFile()->url() . '" srcset="' . $project->coverImage()->toFile()->srcset() . '" /></div>';
echo '<div class="projectLine__cell projectLine__cell--title cell"><p class="cell__text cell__text--title"> <span class="cell__text--ref">' . $project->ref() . '</span> ' . $project->title() . '</p></div>';
echo '<div class="projectLine__cell projectLine__cell--title cell"><p class="cell__text cell__text--place">' . $project->place() . '</p></div>';
echo '<div class="projectLine__cell projectLine__cell--title cell"><p class="cell__text cell__text--dates">';
if ($project->start()->isNotEmpty() && $project->end()->isNotEmpty()) {
echo $project->start() . ' - ' . $project->end();
} else if ($project->start()->isNotEmpty() || $project->end()->isNotEmpty()) {
echo $project->start() . $project->end();
};
echo '</p></div>';
echo '<div class="projectLine__cell projectLine__cell--title cell"><p class="cell__text cell__text--architects">' . $project->architects() . '</p></div>';
echo '<div class="projectLine__cell projectLine__cell--title cell"><p class="cell__text cell__text--mo">' . $project->mo() . '</p></div>';
echo '<div class="projectLine__cell projectLine__cell--title cell"><p class="cell__text cell__text--size">' . $project->size() . '</p></div>';
echo '<div class="projectLine__cell projectLine__cell--title cell"><p class="cell__text cell__text--state">' . $project->state() . '</p></div>';
echo '</a>';
}
}
?>
</section>
<section class="list--mobile" style="display: none">
<?php
foreach ($site->children()->sortBy('end', 'desc', 'start', 'desc') as $project) {
if ($project->coverImage()->isNotEmpty()) {
echo '<a class="list__project--mobile projectLine--mobile" href="' . $project->url() . '">';
echo '<div class="projectLine__cell--mobile projectLine__cell--image--mobile cell--mobile"><img class="cell__image--mobile" loading="lazy" src="' . $project->coverImage()->toFile()->url() . '" srcset="' . $project->coverImage()->toFile()->srcset() . '" /></div>';
echo '<div class="projectLine__cell--mobile projectLine__cell--summary--mobile cell--mobile">';
echo '<p class="cell__text--mobile cell__text--title--mobile"> <span class="cell__text--ref--mobile">' . $project->ref() . '</span> ' . $project->title() . '</br />';
if ($project->start()->isNotEmpty() && $project->end()->isNotEmpty()) {
echo $project->start() . ' - ' . $project->end() . ', ' . $project->place() . '<br />';
} else if ($project->start()->isNotEmpty() || $project->end()->isNotEmpty()) {
echo $project->start() . $project->end() . ', ' . $project->place() . '<br />';
}
if ($project->architects()->isNotEmpty()) {
echo 'MOE : ' . $project->architects() . '<br />';
}
if ($project->moa()->isNotEmpty()) {
echo 'MOA : ' . $project->moa() . '<br />';
}
if ($project->size()->isNotEmpty() && $project->budget()->isNotEmpty()) {
echo $project->size() . ', ' . $project->budget();
} else if ($project->size()->isNotEmpty() || $project->budget()->isNotEmpty()) {
echo $project->size();
}
echo '</p>';
echo '</div>';
echo '</a>';
}
}
?>
</section>
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
<?= js('./assets/js/main.js') ?>
</body>
</html>

157
site/templates/project.php Normal file
View file

@ -0,0 +1,157 @@
<?= snippet('header') ?>
<header class="header">
<a href="<?= $site->find('agence')->url() ?>"><h1 class="header__logo">DATA</h1></a>
<div class="header__views views header__views--unvisible" style="opacity: 1">
<button class="views__btn views__btn--close" style="display: block">
<img src="/assets/svg/close.svg" alt="">
</button>
</div>
</header>
<div class="project">
<div class="projectContainer">
<!-- Slider main container -->
<div class="swiper-container">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<!-- Image principale -->
<div class="swiper-slide">
<img class="swiper-slide__image" src="<?= $page->coverImage()->toFile()->url() ?>" srcset=" <?= $page->coverImage()->toFile()->srcset() ?>" />
</div>
<!-- Galerie -->
<?php
$images = $page->blocks()->toStructure();
foreach ($images as $image): ?>
<?php if ($image->project() == 'true' && $image->pic() !== NULL): ?>
<div class="swiper-slide">
<img class="swiper-slide__image" src="<?= $image->pic()->toFile()->url() ?>" srcset=" <?= $image->pic()->toFile()->srcset() ?>" />
</div>
<?php endif ?>
<?php endforeach ?>
<!-- Slide texte -->
<div class="swiper-slide">
<div class="swiper-slide__intro">
<span class="intro__recap">
<?php if ($page->start()->isNotEmpty() && $page->end()->isNotEmpty()) : ?>
<span class="recap__item">
<?php echo $page->start() . ' - ' . $page->end() . ', ' . $page->place() . '<br />' ?>
</span>
<?php elseif ($page->start()->isNotEmpty() || $page->end()->isNotEmpty()): ?>
<span class="recap__item">
<?= $page->start() ?><?= $page->end() ?>, <?= $page->place() ?>
</span>
<br />
<?php endif ?>
<?php if ($page->pgm()->isNotEmpty()): ?>
<span class="recap__item">
<?= $page->pgm() ?>
</span>
<br />
<?php endif ?>
<?php if ($page->architects()->isNotEmpty()): ?>
<span class="recap__item">
ARCHITECTES : <?= $page->architects() ?>
</span>
<br />
<?php endif ?>
<?php if ($page->be()->isNotEmpty()): ?>
<span class="recap__item">
BE : <?= $page->be() ?>
</span>
<br />
<?php endif ?>
<?php if ($page->mo()->isNotEmpty()): ?>
<span class="recap__item">
MOA : <?= $page->mo() ?>
</span>
<br />
<?php endif ?>
<?php if ($page->size()->isNotEmpty()): ?>
<span class="recap__item">
<?= $page->size() ?>
</span>
<br />
<?php endif ?>
<?php if ($page->credits()->isNotEmpty()): ?>
<span class="recap__item">
<?= $page->credits() ?>
</span>
<?php endif ?>
</span>
</div>
</div>
<!-- Fin slide texte -->
</div>
<!-- If we need pagination -->
<!-- <div class="swiper-pagination"></div> -->
<!-- Navigation buttons -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- If we need scrollbar -->
<!-- <div class="swiper-scrollbar"></div> -->
</div>
<button class="toProjectDesc"><h1 class="project__title"><span class="project__title--ref"><?= $page->ref() ?></span><?= $page->title() ?></h1></button>
</div>
</div>
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
<script>
let mySwiper = new Swiper('.swiper-container', {
// Optional parameters
direction: 'horizontal',
loop: true,
observer: true,
observeSlideChildren: true,
observeParents: true,
speed: 300,
autoplay: {
delay: 2000
},
// Responsive
breakpoints: {
800: {
speed: 500,
autoplay: false
}
},
// Navigation arrows
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev'
},
// Keyboard control
keyboard: {
enabled: true
}
})
document.querySelector('.views__btn--close').addEventListener('click', () => {
document.location.replace('<?= $site->url() ?>')
})
document.querySelector('.toProjectDesc').addEventListener('click', () => {
mySwiper.slideTo(document.querySelectorAll('.swiper-slide').length - 2)
})
</script>
</body>
</html>