Bienvenue sur le Git qui gére le contenu du site de 180°C !
Pour toute question, contactez @antonin_faure sur Telegram ;)
Pour plus d'informations sur le fonctionnement de Git voir ce lien.
Dans un premier temps il faut installer Git sur son ordinateur : Comment installer Git.
Il faut ensuite configurer une clé ssh pour votre ordi. Voir ce tutoriel détaillé.
Pour cloner ce Git sur son ordi exécuter dans le dossier de votre choix la commande :
git clone https://github.com/antoninfaure/180c-content
Pour rester à jour des dernières modifications actualisées sur le Github il faut pull
la dernière version depuis ce dernier. Dans votre dossier du Git exécutez :
git pull
Pour enregistrer ses modifications il faut commit
. Dans votre dossier du Git exécutez :
git add . # ajouter tous les fichiers du dossier au commit
git commit -m "description de la modification"
Pour envoyer ses modifications sur github il faut push
. Dans votre dossier du Git exécutez :
git push origin main
Le git est organisé selon plusieurs dossiers :
crieur
: gestion du Crieur (établissements, paramètres, ...)membres
: gestion de la liste des membresarticles
: gestion des articles
Plusieurs scripts Python sont utilisés par la suite par Github Actions pour les pipelines de déploiements :
update_crieur.py
: actualise la base de données en fonction des établissements listés dans le dossiercrieur
move_imgs.py
: copie les images des établissements sur le Git de l'apputils.py
: définie des fonctions utilisées par les autres scripts
Le site est basé sur une web application NodeJS dont le Git est séparé de celui-ci. La gestion du contenu étant sur ce Git tandis que toute la machinerie se fait sur le Git de l'application donc pas besoin de la connaître ;).
Dès qu'un contenu est push sur la branche main
du Github un pipeline GitHub Actions est lancé afin d'update la base de données et le Git de l'application avec les nouvelles données.
Tous les jours à 22h le Git de l'application passe la branche main
sur la branche prod
. Cette dernière est la version mise en production ce qui signifie que toute modification ne prendra effet qu'à 22h (sauf exécution manuelle de la part d'un admin).
Le site est quant à lui hébergé sur Heroku (lien de l'application) et relié à la branche prod
du Git de l'application. Dès qu'une modification est effectuée sur cette branche, Heroku redéploie l'application avec la dernière version.
Rien de plus simple, il faut juste créer un dossier avec le code de l'établissement souhaité (ex: brasserie-du-chateau
). Ce dernier sera le même que dans le lien https://.../crieur/{code}
donc attention aux charactères spéciaux.
La structure d'un établissement est la suivante :
code
├── place.json
└── images
├── image1.webp
└── image2.png
C'est le fichier qui décrit l'établissement. Il est au format json donc attention à bien entourer les valeurs avec des " et non '.
Un exemple place_template.json
peut être trouvé dans le dossier crieur
.
place.json
├── available
├── name
├── style
├─ ─ banner
├─ ─ front
├─ ─ description
├── types
| ├── type1
| ├── type2
├── priceTag
├── price
├─ ─ tags
├─ ─ tips
├─ ─ tops
├─ ─ links
└── locations
├── location1
├── adresse
| ├── latitude
├── longitude
| ├── map
└── horaires
| ├── day1
├── name
| | └── creneaux
├── creneau1
| | ├── start
| └── end
| |
Nom | Obligatoire | Type | Description |
---|---|---|---|
available |
true |
boolean | Page disponible si true , cachée si false |
name |
true |
text | Nom de l'établissement |
style |
true |
text | Style de l'établissemnt (résumé) Exemple : "Bar à tacos" ou "Pizzeria" |
banner |
false |
text | Nom du fichier de l'image de la bannière de la page (en haut) |
front |
false |
text | Nom du fichier de l'image de la devanture (affichée sur la page et dans le slider des établissements) |
description |
false |
text | Description de l'établissement |
types |
true |
list of text | Liste des types de l'établissemnt (au moins un) (voir Paramètres du Crieur - Types) ex : ["restaurant", "bar"] |
priceTag |
true |
int | Catégorie de prix de l'établissemnt (voir Paramètres du Crieur - priceTag) ex : 2 |
price |
true |
text | Valeur textuelle au choix qui décrit la fourchette de prix. ex : "~25 CHF" ou "10-15 CHF" |
tags |
false |
list of text | Liste des tags de l'établissemnt (voir Paramètres du Crieur - Tags) ex : ["vege", "takeaway"] |
tips |
false |
text | Paragraphe donnant des conseils/astuces |
tops |
false |
list of tops | Liste de recommandations (voir Paramètres top) |
links |
false |
list of links | Liste des liens de l'établissement (voir Paramètres link) |
locations |
true |
list of location | Liste des localisations de l'établissement (voir Paramètres location) |
Nom | Obligatoire | Type | Description |
---|---|---|---|
social |
true |
text | Nom du réseau social. ex : "facebook" |
url |
true |
text | Lien |
Nom | Obligatoire | Type | Description |
---|---|---|---|
social |
true |
text | Nom du réseau social. ex : "facebook" |
url |
true |
text | Lien |
Nom | Obligatoire | Type | Description |
---|---|---|---|
adresse |
true |
text | Nom de la recommandation. ex : "Tiramisu" |
latitude |
true |
float | Nom du fichier de l'image de la recommandation |
longitude |
true |
float | Description de la recommandation |
map |
true |
text | Lien de la source de la Google Map (voir ci-dessous) |
horaires |
true |
list of horaire | Liste des horaires par jour (exemple ci-dessous) |
Exemple de liste d'horaires
"horaires": [
{
"name": "Lundi",
"creneaux": [
{
"start": "12:00",
"end": "15:30"
},
{
"start": "19:00",
"end": "22:30"
}
]
},
...
]
Lien source Google Map
Allez sur Google Maps, chercher l'adresse voulue puis cliquez sur "Partager" -> "Intégrer une carte" -> "Copier le contenu HTML". Dans le contenu copier il ne faut garder que l'url de l'attribut src.
Exemple de contenu HTML :
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d1089.5689930661053!2d6.628094727093368!3d46.51717774664765!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x478c2fe53ca8db4b%3A0xebd2430627039f06!2stibits!5e0!3m2!1sfr!2sch!4v1677016573711!5m2!1sfr!2sch" width="600" height="450" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
et le lien à copier dans place.json
:
https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d1089.5689930661053!2d6.628094727093368!3d46.51717774664765!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x478c2fe53ca8db4b%3A0xebd2430627039f06!2stibits!5e0!3m2!1sfr!2sch!4v1677016573711!5m2!1sfr!2sch
Pour ajouter des images pour l'établissement il faut simplement les mettre dans un dossier images
dans le dossier de l'établissement et ensuite référencer leurs noms dans place.json
.
MERCI de bien les compresser avant x_x
Tous les formats sont pris en charges néanmoins de recommande le format .webp
qui est mieux pris en charge par les navigateurs.
Pour retirer un établissement rien de plus simple, il faut juste supprimer le fichier place.json
ou carrément supprimer le dossier de l'établissement !
Les paramètres du Crieur sont modifiables dans le fichier config_crieur.json
.
config_crieur.json
├── types
├── links
└── tags
Liste les différents types possibles d'établissement. Utilisé notamment pour les filtres de la carte.
Nom | Obligatoire | Type | Description |
---|---|---|---|
code |
true |
text | Code utilisé pour référencer le type (celui à mettre dans place.json ) |
name |
true |
text | Nom affiché |
icon |
true |
text | Code HTML de l'icône (voir Ajouter un icône) |
Liste les différents tags possibles d'établissement.
Nom | Obligatoire | Type | Description |
---|---|---|---|
code |
true |
text | Code utilisé pour référencer le tag (celui à mettre dans place.json ) |
name |
true |
text | Nom affiché |
icon |
true |
text | Code HTML de l'icône (voir Ajouter un icône) |
Liste les différents réseaux sociaux possibles.
Nom | Obligatoire | Type | Description |
---|---|---|---|
social |
true |
text | Code utilisé pour référencer le social (celui à mettre dans place.json ) |
icon |
true |
text | Code HTML de l'icône (voir Ajouter un icône) |
Liste les différentes fourchettes de prix possibles.
- 1 = $
- 2 = $$
- 3 = $$$
- 4 = $$$$
Les icônes utilisés sont ceux de Font Awesome (version 6.3.0) et uniquement ceux gratuits, et solid ou brand. Pour voir la liste c'est à ce lien.
Il suffit ensuite de copier le code HTML. Exemple : "" (attention à bien mettre des ' ' à l'intérieur des " ")
Rien de plus simple, il faut juste créer un fichier .yaml
avec le code de l'article souhaité (ex: recette-02-2023
).
Attention le format .yaml est sensible aux tabulations des valeurs (voir Synthaxe YAML).
Il existe 2 types d'articles :
- Article de contenu : article avec une page dédiée (et donc avec contenu)
- Article de redirection : article sans page dédiée (et donc sans contenu) qui redirige juste vers une url
Nom | Obligatoire | Type | Description |
---|---|---|---|
available |
true |
boolean | Article disponible si true , cachée si false |
title |
true |
text | Titre de l'article |
date |
true |
text | Valeur de la date au format YYYY-MM-DDTHH:mm:ss.ms+01:00 |
code |
true |
text | Code de l'article |
thumbnail |
true |
text | Nom du fichier de l'image associée à l'article |
summary |
true |
text | Description courte de l'article |
content |
false |
text | Contenu HTML de l'article (inutile si article de redirection) |
url |
false |
text | Url de redirection (inutile si article de contenu) |
Pour retirer un article rien de plus simple, il faut juste supprimer le fichier .yaml
ou alors le rendre indisponible avec available
égal à false
.