Septembre 2022

Site personnel

Réalisation de mon site personnel

Couverture
Unités d'enseignement mobilisées
Développer
Apprentissages critiques
AC4101 Exploiter de manière autonome un environnement de développement efficace et productif
AC4102 Produire des pages Web statiques et fluides utilisant un balisage sémantique efficace
AC4103 Générer des pages Web ou vues à partir de données structurées incluant des interactions simples
AC4104 Mettre en ligne une application Web en utilisant une solution d’hébergement standard
Présentation

Création de mon site présentant mes différents travaux en BUT MMI. 

Version 1

En septembre 2022, j'ai voulu personnaliser mon site de travaux pour y accueillir une présentation de moi, ainsi que quelques projets que j'avait déjà fait jusque là.

 Version 1 du site

Lorsqu'on nous a parlé de réaliser un portfolio universitaire, je me suis rendu compte que ce site ne me convenait plus et j'ai commencé à réfléchir à la réalisation d'un nouveau site personnel.

Version 2

Version 2 du site de travaux

Sur ce nouveau site, je me suis créé un "CMS" très simple pour pouvoir éditer mon portfolio très facilement et rapidement en utilisant la librairie "EditorJS", la propriété "contenteditable" et en stockant les données dans un fichier JSON.

Edit mode

Les pages de mon portfolio sont donc générées automatiquement et je peux également ajouter du contenu très rapidement.

Add project

Bout du code JavaScript permettant la sauvegarde

const name = nameElement.innerHTML;
const description = descriptionElement.innerHTML;
const presentation = presentationElement.innerHTML;
const color = document
    .querySelector(".heading")
    .style.getPropertyValue("--project_color");
const buttons = document.querySelectorAll(".btn-list > *");
const buttonsArray = [];
for (const button of buttons) {
    if (button.id === "btn_plus") continue;
    buttonsArray.push({
        text: button.innerText,
        href: button.getAttribute("href"),
        target: button.getAttribute("target"),
        class: button.getAttribute("class").replace("btn ", ""),
        style: button.getAttribute("style"),
    });
}

const formData = new FormData();
formData.append(
    "data",
    JSON.stringify({
        name,
        description,
        color,
        presentation,
        buttons: buttonsArray,
        tags: getSelectValues(tags),
        ac: getSelectValues(selectAc),
        date: monthDate.value,
        elements,
    })
);

if (uploadThumbnail.files[0]) {
    formData.append(
        "thumbnail",
        uploadThumbnail.files[0],
        uploadThumbnail.files[0].name
    );
}

fetch("/api/admin/projects/update.php", {
    method: "POST",
    body: formData,
}).then((r) => {
    if (r.status === 200) {
        alert("Projet mis à jour !");
        leaveEditMode();
    } else {
        alert("Une erreur est survenue");
    }
});

Morceau du code PHP permettant la sauvegarde

$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::NONE, pattern: 'MMMM yyyy');
foreach ($project as $key => $value) {
    if ($key === 'date')
        $value = ucfirst($formatter->format(strtotime($value)));
    if ($key === 'presentation')
        $value = html_entity_decode($value);

    $projects[$projectKey][$key] = $value;
}
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/api/projects.json', json_encode($projects, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE));

Voir d'autres réalisations...