En début d’année ma chérie terminait la campagne Ulule de son projet Paysages à vélo et se posait la question de continuer la vente de ses créations via une boutique en ligne.
Elle m’a alors sollicité pour l’aider à concevoir et construire cette boutique. Elle hésitait entre une solution clef en main telle que Shopify ou une solution basée sur un framework e-commerce tel WooCommerce.
Néanmoins, la première solution reste onéreuse pour un petit projet (peu de ventes) et la seconde demande beaucoup d’énergie y compris pour un petit catalogue.
Je lui ai alors proposé de créer un site web statique avec Cecil auquel nous brancherions la solution e-commerce Snipcart afin de dynamiser les interactions utilisateur.
- Nous soutenir
- Contributeurs
- Charte graphique
- Administrateurs
- À propos de Jamstatic
- Actualités
- Références
- Exemples de code
- Qu'est-ce que vous faites quand vous ne travaillez pas sur Jekyll ?
- Peux-tu nous dire comment tu as été amené à t'impliquer dans Jekyll et ce qui s'est passé depuis pour aboutir à la mise en ligne de la version 3.0 de Jekyll ?
- Tu as débuté avec la 0.12.1 ?
- Quelle fut ta première expérience de programmation ?
- Quelle fut ta première rencontre avec les générateurs de site statique modernes ?
- C'était donc une question de masse critique ? Il y avait pas mal de gens, donc tu savais que c'était vivant et actif
- Que souhaites-tu aux générateurs de site statique ?
- Comment est-il possible de faire cela ?
- Le dynamique a l’air bien plus intéressant !
- Oui statique ça fait un peu péjoratif dans ce contexte
- En tant que mainteneur de Jekyll, qu'aimerais-tu dire, communiquer à ceux qui s'intéressent aux technologies autour du web statique moderne ? La tribune est à toi
- Prérequis
- Pages utilisateur et organisation
- Pages projet
- Les thèmes peuvent désormais fournir des assets statiques et dynamiques dans le dossier /assets
- Les filtres relative_url et absolute_url
- site.url est maintenant défini pour le serveur de développement
- Et bien plus encore
- Prérequis
- Préparer son thème
- Tester son thème
- Un guide complet pour coder et déployer un site, tout en ligne de commande
- C’est quoi Jekyll ?
- Développons un portfolio !
- Plongeons dans les fichiers
- Modifier les paramètres de votre site
- Ajoutons notre premier article !
- YAML front matter
- Liquid
- Écrire un article pour de vrai
- Un autre exemple d’article en .md
- Ajoutons un peu de CSS à tout ça
- Sass
- Versionnement avec Git
- Configurer Git
- Créer un dépôt sur GitHub
- GitHub Pages
- Mes conseils supplémentaires
- Système de grille
- Rythme vertical
- Fin
- Passer à la version 2 de Staticman
- Ajout du support des fils de commentaires
- Ajout du support des notifications par mail
- La transformation de Jekyll
- Le cœur de Jekyll
- Test exhaustif d’une génération
- Génération des fichiers sans l’option brouillons
- Génération des fichiers avec l’option brouillon
- Comment et pourquoi en êtes-vous arrivés à choisir un générateur de site statique comme clé de voûte de votre processus de publication aux éditions The Getty ? Pourquoi ne pas avoir opté pour un développement natif ?
- Comment votre équipe s'est appropriée ce nouveau workflow ? L'appropriation a-t-elle été facile ?
- Est-ce que tu penses qu'un process à base de technologies web peut remplacer le couple démoniaque Word et InDesign ? Particulièrement en ce qui concerne la facilité d’écriture et de structuration des contenus (WYSIWYG) ainsi que la mise en page (InDesign) ?
- Est-ce que ce nouveau process augmente la qualité des publications de The Getty ?
- Est-ce que ce nouveau workflow vous fait gagner du temps et de l’argent ? Y’a t-il une différence de prix de revient pour les livres, y compris pour les livres papier ?
- Quelles sont les contraintes auxquelles vous vous heurtez encore aujourd’hui ? Quel serait votre workflow idéal ?
- Est-ce que tu penses que d’autres maisons d’édition vont adopter à leur tour cette stratégie avec des générateurs de site statique (pas de WYSIWYG, un balisage léger, pas de base de données, des métadonnées YAML, versionnement avec Git, etc.) ? Est-ce qu'un courant pourrait se former autour de ce concept ?
- Les rudiments d’un générateur de site statique
- Allons au cœur du problème
- Les rudiments de Harp
- C’est pas si compliqué, non ?
- Mon rapport et mon livre
- Du YAML front matter, une boucle for et pas mal de modules
- Le workflow Git
- Utilisation de Netlify
- Configuration de Jekyll
- De quoi parle-t-on ?
- Prérequis
- Jamstack et développement statique
- 1. Référencement
- 2. Performance
- 3. Sécurité
- 4. Déploiement & Workflow
- 5. Une communauté en pleine expansion
- Est-ce que c'est fait pour moi ?
- Écouter l’épopée de Smashing Magazine
- Un travail titanesque
- Ainsi naquirent nos rêves d’open source
- Notre CMS open source
- Putain, on l’a fait !
- Configurer Netlify
- Authentification via GitHub
- Ajout des fichiers de l’admin
- Accéder à l’administration
- Et voilà !
- Choisir un générateur de site statique
- Configurer Hugo
- Se plonger dans Hugo : quelques détails techniques
- Héberger chez Netlify
- Résumé de ma configuration actuelle
- Objectifs futurs
- Quelques mots de conclusion ?
- Quels problèmes Gatsby essaie-t-il de résoudre ?
- Comment se positionne Gatsby par rapport aux autres générateurs de sites statiques, qu'ils soient basés sur React ou non ?
- Quelle longévité peut-on espérer pour Gatsby ?
- Que prévoyez-vous ensuite ?
- Hugo : un générateur de site statique super rapide
- Tutoriel Hugo : site, produits, modèles et déploiement
- Démo de site Hugo et dépôt GitHub
- Conclusion et ressources supplémentaires
- Introduction
- Fondamentaux des templates Hugo
- Prenons de la hauteur
- La fin et le début
- Comment fonctionnent les thèmes ?
- Comment utiliser un thème ?
- Quels thèmes puis-je utiliser ?
- Trucs et astuces pour créer un super thème
- Bien configurer son environnement
- C’est parti
- La structure de fichiers
- Développer votre thème
- Ajouter des contenus d’exemple
- Soumettre sa gem de thème
- Les thèmes distants sur GitHub Pages
- Tests et mises à jour
- Bonjour Bjørn Erik, comment t'es-tu retrouvé impliqué dans Hugo ?
- Les problèmes résolus par Hugo
- Comment fait Hugo pour aller si vite ?
- Quels sont les sites les plus visibles qui utilisent Hugo ?
- Comment se porte le projet actuellement ?
- Hugo est open source. Comment se passe la gestion du projet ?
- Qui vous soutient dans le développement ?
- Quelle est la prochaine étape pour Hugo ?
- Bonjour Bud, tu es un observateur et un défenseur de ce que beaucoup désignent encore comme de simples sites statiques. Comment les choses ont-elles évolué depuis quelques années ?
- En 2015 Tom Preston-Werner disait lors de la JekyllConf que 80% du Web pourrait être statique, est-ce le cas aujourd’hui ?
- Les administrations publiques aux États-Unis (avec 18F), au Royaume-Uni (avec Alphagov) ou en France (avec Etalab) semblent privilégier ce type de workflow. Pourquoi à ton avis est-ce si intéressant pour les administrations publiques et les organismes ouverts ?
- Nous voyons aussi de plus en plus d’agences, de start-ups adopter cette manière de travailler par défaut quand il s'agit de publier des contenus. Quels sont selon toi les projets les plus susceptibles de faire réfléchir à deux fois avant de dégaîner son bon vieux CMS ?
- Mais alors pourquoi les agences n'adoptent-elles pas ce processus de travail ?
- Si ce workflow est naturel pour les développeurs Web, les utilisateurs finaux préfèrent utiliser une interface graphique complète. Ces deux manières de travailler sont-elles compatibles ?
- Quel est ton workflow actuel ? Qu'est-ce qui te plaît tant dedans ?
- Comment vends-tu cette manière de travailler à tes clients ?
- Que souhaites-tu pour cette stack Web moderne à court terme ?
- Bonjour Michael, comment te présenter ?
- Comment en es-tu venu à adopter Jekyll comme outil de publication ?
- Sur quels types de sites travailles-tu ?
- Qu'est-ce qui te plait dans le fait de travailler avec des générateurs de site statique ?
- Quelle est ta fonctionnalité préférée dans Jekyll ?
- Quelle est la fonctionnalité qui te manque le plus ?
- Pourquoi y a-t-il aussi peu de thèmes de qualité pour Jekyll selon toi?
- Pourquoi n'y a-t-il pas plus de designers Web qui travaillent avec des générateurs de site statique ?
- Ton thème hpster a été porté pour Hugo, est-ce que tu as testé ?
- Avantages
- Prise de conscience
- Les fonctionnalités dynamiques
- Le panier d’achat
- En résumé
- Hugo
- Performance
- Les données
- Exemple d’architecture
- Déploiement
- Questions en suspend
- Pour aller plus loin
- Mais d’abord, comment démarrer simplement
- 1. Déploiements atomiques avec publication et retour en arrière immédiats
- 2. Notifications et permaliens
- 3. Branches de déploiement et sous-domaines
- 4. Tests A/B, Tests A/B avec plusieurs variantes ou tests séparés
- 5. Commandes de génération contextuelles
- 6. Gestion des certificats SSL et SSL gratuit avec Let’s Encrypt
- 7. Lancer des tests avec l’intégration continue de Netlify
- 8. Gestion des formulaires
- 9. Redirections, réécritures et proxy
- 10. Contrôle des entêtes personnalisés
- Ça en fait 10, mais ce n'est pas tout
- L'API WordPress
- Ajouter vos articles dans Metalsmith
- Étape suivante
- Le contexte et le point
- Le point de la page
- Les fichiers partiels
- Conclusion
- C'est quoi Scratch ?
- Manipuler des tableaux et des maps
- Attention au périmètre et au contexte…
- .Scratch après Go 1.11
- Flexibilité
- Pariez sur JavaScript
- Eleventy n'est pas un framework JavaScript
- Testez Eleventy !
- 1. Configurer Hugo
- 2. Configurer votre site
- 3. Personnaliser votre site
- 4. Personnaliser votre thème
- 5. Prochaine étape
- Un site de quatre pages avec un entête, une navigation et un pied de page consistants
- Utiliser un seul gabarit pour nos pages
- Rendre la navigation active
- Rédiger du contenu en Markdown
- Développer de vrais composants
- Créer autant de composants que vous voulez
- Un avis rapide sur les sites statiques
- Allez de l’avant et passer au statique
- Making platforms promote performance
- Ajouter une recherche sur un site statique
- Une chouette soirée
- Obtenir vos clefs d’API
- Connecter votre source de données
- Préparer les données pour Algolia
- Envoi des données à Algolia
- Configuration des paramètres
- Connecter le front-end
- Le Projet
- Statut des relations avant Related Content: c'est compliqué
- La fonctionnalité Related Content d’Hugo
- Conclusion
- Jekyll
- Hugo
- En résumé
- Introduction
- Installation de l’API
- Développement du site statique
- Conclusion
- Pourquoi maintenant ?
- L'histoire de la Jamstack
- Le paysage de la Jamstack
- Les bénéfices
- Et ensuite ?
- Conclusion
- Traitement des assets
- Et ensuite ?
- Conclusion
- Configurer les langues
- Traduire nos pages
- Créer des liens vers les traductions 🔗
- Les bundles de page
- Configurer nos URLs
- Localisation des chaînes de caractères
- Mettre les chaînes au pluriel
- Conclusion 🏁
- La configuration est clé
- CircleCI
- TravisCI
- Drone
- GitLab CI
- Jenkins
- Choisir l'outil qui vous convient le mieux
- Configuration de Jekyll
- POSSE avec Micro.blog
- Publication
- TL;DR
- Inclusions : à consommer avec modération
- Faites confiance aux gemmes compilées en C
- Si vous pouvez l'éviter, n'utilisez pas LSI
- Markdown : choisissez la bonne variante
- Faites confiance à la Team pour aller dans la bonne direction
- Qu'en est-il de mon chantier multilingue ?
- Protocole expérimental
- Présentation d'Eleventy
- Avant de commencer
- Installer Eleventy
- La configuration
- Les gabarits de mise en forme
- Les variables
- Les filtres
- Les includes
- Les collections
- Utiliser les données de répertoire pour définir les paramètres par défaut
- Les fichiers statiques
- Considérations finales
- Montez d'un cran
- Les collections à base de tags
- Les collections sur mesure
- Comment ça marche à l'usage ?
- Implémentation
- De WordPress à Hugo
- Tout est page
- Modèles et hiérarchie
- La boucle et les données
- Les shortcodes
- Paramètres
- Formats de sortie
- Traitement des assets
- Thèmes et Plugins VS Composants de Thème
- On en parle de l'interface du CMS ou pas ?
- Autres fonctionnalités notables
- Conclusion
- C'est quoi la Jamstack ?
- Bien démarrer
- À propos
- Qu'est-ce qu'une appli Web ?
- Gmail
- Twitter (Progressive Web Application)
- Gatsby est taillé pour les applis Web
- Pourquoi utiliser Gatsby pour une appli Web ?
- La Coquille Applicative
- Et voici… Gatsby Mail ! (Qui ne sert qu'à des fins de démonstration !)
- Devez-vous passer de GitHub Pages à Netlify ?
- Migrer de GitHub Pages à Netlify
- Ajouter Netlify CMS à un site existant
- Notre retour d'expérience avec Netlify + Netlify CMS
- Communauté et contribution
- Modulariser le CMS
- L'émergence du maillage de contenus
- Trois domaines avec une innovation rapide
- Intégrer les technologies modernes en déléguant le travail
- Le paysage du développement web moderne
- Choisir un générateur de site
- Satisfait de mon choix
- Définition des locales
- Filtre de localisation de date
- Localisation des collections
- Localisation des layouts et des fichiers partiels
- Flexible par nature
- Les différents types de CMS headless
- Structure du projet
- Configuration de DatoCMS
- Configuration d'Eleventy
- Utilisation des fichiers de données JavaScript
- Générer une liste paginée des articles de blog avec 11ty
- Générer les pages individuelles pour les articles dans 11ty
- Déclencher automatiquement les builds
- Mise en place
- Les langues du site
- Ajout des clés de traduction
- Coder notre sélecteur de langue
- Les CMS basés sur Git
- Les CMS API-first
- Les bénéfices des CMS basés sur Git
- Les bénéfices des CMS basés sur des APIs
- Les défis posés par les CMS basés sur Git
- Les défis posés par les CMS basés sur des APIs
- Alors quel CMS headless devez vous choisir ?
- Liste de plate-formes CMS basées sur Git
- Liste de plates-formes CMS basées sur des APis
- Pourquoi utiliser partialCached ?
- Les variantes de partiel
- Haussons le niveau d'un cran 💪
- Et les langues ? 🇫🇷🇬🇧
- Améliorer votre temps de génération ⏱️
- Conclusion
- Les bénéfices de la Jamstack
- Expliquer la Jamstack au client
- En résumé…
- Quelques points à retenir
- Coder nos partiels de fonction
- Gestion des arguments
- Mise en cache !
- Des améliorations possibles ?
- Conclusion
- Étape 1 : s'inscrire sur webmentions.io
- Comment tout ça va marcher
- Récupération des webmentions
- Filtres pour la génération
- Afficher les mentions
- Sautons courageusement dans l’inconnu…
- Poursuivez en ajoutant des Microformats
- Ressources additionnelles
- Créer un module Hugo
- Conclusion
- Ressources complémentaires
- À quoi Gatsby est-il bon ?
- Où est le problème ?
- GraphQL est excessif pour la plupart des sites statiques
- Déboguer est un cauchemar
- Gatsby pourrait bien être trop intelligent à ses dépens
- Les plugins
- Next.js c'est top pour des sites statiques
- Gatsby et moi c'est terminé
- Privilégier le côté serveur
- Améliorer le côté client, s’il est indispensable
- Les appels à l’API uniquement côté client ont parfois plus de sens
- Promouvoir la AJMstack Mstack
- Les tests
- Les deux types de générateurs de sites statiques
- Mon hypothèse
- Les résultats sont arrivés
- Synthèse des résultats
- Qu'en conclure ?
- Conclusion
- Introduction
- Bataille d'égo de CEO
- L'API de WordPress pour le blog de Gatsby
- Les annonces de la première Next.js conf
- Gatsby simplifie la génération de pages
- Nuxt.js de plus en plus statique
- Hugo de mieux en mieux outillé pour le JavaScript
- Tailwind 2.0
- Eleventy en route vers le million de téléchargements
- Comment ne pas faire subir le coût des frameworks à ses visiteurs ?
- Intervenants
- Le contexte
- Choix des générateurs et du CMS Headless
- Commençons avec Next.js
- Génération des 11 000 pages et premier blocage
- La surprise ou le blocage qu'on attendait pas
- La régénération incrémentale à la rescousse
- La solution retenue
- Prototype privé
- Pourquoi un site statique ?
- Pourquoi Snipcart ?
- Mise en œuvre
- Gestion de contenu (CMS)
- Conclusion
Pourquoi un site statique ?
Je suis un fervent promoteur de l’approche statique pour la diffusion de sites web de contenu pour les raisons suivantes (entre autres) :
- Performance : une fois généré, le site n’a pas plus besoin d’être interprété par le serveur, juste d’être servi ;
- Simplicité : pas de base de données à maintenir car les données sont stockées dans des fichiers plats (Markdown + YAML) ;
- Portabilité : peut être hébergé sur n’importe serveur web et peut donc être migré facilement selon les besoins.
Dans le cas de ce projet j’ai donc utilisé mon propre générateur de site statique : Cecil.
Pourquoi Snipcart ?
Snipcart n’est pas une solution e-commerce clef en main mais plutôt un « checkout » (tunnel d’achat) à ajouter à n’importe quel site web.
Il est donc nécessaire d’avoir préalablement créé un site catalogue pour charger les articles (produits) dans sa boutique Snipcart, puis de placer un bouton d’ajout au panier sur chaque fiche produit.
Le reste, à savoir le panier et les étapes de la commandes (saisie de l’adresse de facturation, choix du mode de livraison, paiement, etc.), est injecté automatiquement via JavaScript par le composant Snipcart.
Intérêt de cette approche et de Snipcart en particulier :
- Indépendance concernant la gestion du catalogue ;
- Peu ou pas de développement spécifique, principalement de la personnalisation ;
- Tarif honnête (2% des ventes) ;
- Sécurisation des transactions portée par la solution de paiement (ici Stripe).
Mise en œuvre
Création du catalogue
Le catalogue de Paysages à vélo est très simple : il s’agit de proposer moins d’une dizaine d’affiches dans 2 formats d’impression (A3 et A5).
En pratique nous avons 6 modèles composés d’1 variant « format ».
Les attributs et le texte de la fiche produit sont définis dans un fichier Markdown (avec un « front matter ») :
pages/products
|_ index.md
|_ 1.pink-gravel.md
|_ 2.purple-cargo.md
|_ 3.yellow-longtail.md
|_ 4.blue-folding-bike.md
|_ 5.ultra-violet-gang.md
|_ 6.lemon-lovers.md
Les produits partagent les mêmes caractéristiques de base, qui peuvent donc être mutualisées à la racine de la section products via le fichier pages/products/index.md.
Les attributs sont définis via des variables au format YAML :
---
cascade:
price: 23
variants:
- name: Format
options:
- value: A3
html: "Affiche A3 - 23 €"
price: 0
- value: A5
html: "Carte A5 - 8 €"
price: -15
---
J’ai utilisé la variable spéciale cascade qui permet de faire hériter à toutes pages de la section les variables qu’elle contient :
price: le prix de référencevariants: qui caractérise les déclinaisons pour chacun des produits, en l’occurrence le format d’impressionoptions:value: la valeur du format (ex : « A3 »)html: le texte affiché dans la liste déroulanteprice: le prix modifié par rapport au prix de référence (qui peut être négatif)
Ensuite chacun des produits est caractérisé via son propre fichier Markdown, par exemple pages/products/1.pink-gravel.md :
---
title: "Pink gravel"
description: "Femme ridant en toute liberté au pieds des montagnes."
name: "#01 Pink gravel"
image: "/images/products/01-Pink-gravel-A3_S.png"
gallery:
- "/images/products/01-Pink-gravel-A5_S.png"
- "/images/products/01-Pink-gravel-ZOOM_S.png"
published: true
---
**Gavarnie, Hautes-Pyrénées.**
**Femme ridant en toute liberté au pieds des montagnes.**
_Impression numérique sans bordure sur papier couché premium semi mat 200 g (carte A5 300 g).
Les affiches sont toutes signées à la main._
Templates et intégration Snipcart
Liste des produits
La volumétrie du catalogue étant très faible il n’est pas nécessaire de construire une arborescence complexe : afficher l’ensemble des produits sur la page d’accueil est suffisant.
Ainsi le template Twig layouts/index.html.twig liste l’ensemble des « pages » contenus dans la section products triées par « poids » inverse (donc la dernière création en première position) :
{% extends 'page.html.twig' %}
{% block content %}
<div class="hero">
{{~ page.content ~}}
</div>
<div class="products">
{%- for product in site.pages.all|filter_by('section', 'products')|sort_by_weight|reverse ~%}
{%~ include 'components/product.html.twig' with {'product': product, 'home': true} only ~%}
{%- endfor ~%}
</div>
{% endblock %}
Fiche produit
La fiche produit (un composant Twig réutilisable) va afficher :
- Les informations : nom, description, photos, etc.
- Le choix du format (options du variant format), la saisie de la quantité souhaitée et le bouton « Ajouter au panier »
Concentrons nous sur le cœur de la fiche produit, à savoir l’ajout au panier :
<div class="product__details">
{%- if product.variants is defined ~%}
<div>
{%- for variant in product.variants ~%}
{%- if variant.options is defined ~%}
<label for="{{ productId }}-{{ variant.name|lower }}">{{ variant.name }}</label>
<select id="{{ productId }}-{{ variant.name|lower }}" class="{{ variant.name|lower }}">
{%- for option in variant.options ~%}
<option value="{{ option.value }}">{{ option.html }}</option>
{%- endfor ~%}
</select>
{%- endif ~%}
{%- endfor ~%}
</div>
{%- endif ~%}
<div>
<label for="{{ productId }}-qty">Quantité</label>
<input type="number" id="{{ productId }}-qty" class="qty" min="1" max="10" value="1" />
</div>
{%~ include 'components/add-item.html.twig' with {'productId':productId,'product':product} only ~%}
</div>
Cette portion du template layouts/components/product.html.twig est composée de 3 parties :
- La liste déroulantes des formats, en faisant une boucle sur l‘ensemble des variants disponibles (ici uniquement format), puis une autre boucle sur l’ensemble des options (A3 et A5) ;
- Le champ de saisi de la quantité ;
- Le bouton d’ajout au panier (représenté par le composant
add-item.html.twig).
C’est le composant bouton qui porte les attributs permettant l’ajout du produit au panier Snipcart.
Intégration Snipcart
L’intégration de Snipcart est simple, et nécessite :
- La feuille de style de référence ;
- Un ou plusieurs boutons d’ajout au panier, portant les attributs du produit : identifiant, URL, nom, prix, etc. ;
- Une balise
<div>invisible (permettant affichage du panier) portant la clef d’API Snipcart ; - L’applicatif à proprement parlé via un fichier JavaScript.
<link rel="stylesheet" href="https://cdn.snipcart.com/themes/v3.0.11/default/snipcart.css" />
<button class="snipcart-add-item"
data-item-id="product-1"
data-item-url="/"
data-item-name="Product #1"
data-item-price="10.99"
>Add to cart</button>
<div hidden id="snipcart" data-api-key="MzMxN2Y0ODMtOWNhMy00YzUzLWFiNTYtZjMwZTRkZDcxYzM4"></div>
<script src="https://cdn.snipcart.com/themes/v3.0.11/default/snipcart.js"></script>
- Démo : https://codepen.io/thatfrankdev/pen/xxwRXQw?editors=1000
- Template de Paysages à vélo : layouts/components/add-item.html.twig
Personnalisation du tunnel d’achat
J’ai également pris le temps de personnaliser le tunnel d’achat à la fois au niveau du rendu graphique et des étapes.
Personnalisation du rendu
Concernant le rendu graphique, ce n’est pas le plus commode à réaliser : il est en effet nécessaire d’inspecter l’ensemble des composants HTML afin d’identifier les classes CSS, de les dupliquer et de les modifier selon ses besoins.
Par exemple, pour remplacer la police de caractère :
.snipcart {
font-family: 'Roboto Condensed', sans-serif;
}
La feuille de style Sass de Paysages à vélo disponible sur GitHub.
Remarque : depuis la version 3.2, Snipcart a introduit la notion de « Theming » qui facilite grandement la personnalisation via des propriétés CSS.
Personnalisation des textes
Les textes de l’interface de Snipcart sont disponibles en français (à laquelle j’ai d’ailleurs apporté ma contribution) sans paramétrage particulier (autre qu’en définissant l’attribut lang de la balise <html>) mais si vous souhaitez personnaliser les textes, ça reste possible en chargeant son propre fichier de langue :
document.addEventListener('snipcart.ready', function() {
fetch('/snipcart/{{ language }}.json')
.then(response => response.json())
.then(translation => Snipcart.api.session.setLanguage('{{ language }}', translation))
});
Personnalisation des formulaires
Snipcart permet également de modifier et d’enrichir les étapes du tunnel d’achat via des templates Vue.js :
<div hidden id="snipcart" data-api-key="{{ site.snipcart.apikey }}" data-templates-url="/snipcart/templates.tpl"></div>
Ainsi, dans le cas de Paysages à vélo j’ai :
- Modifié l’affichage des lignes du panier afin d’y indiquer le format d’impression sélectionné à côté du nom du produit ;
- Désactivé la suggestion d’adresse (qui n’est pas très fiable sur le territoire français) ;
- Ajouté un champ de saisi d’un message cadeau.
Par exemple, dans le cas du champ de saisi du message cadeau, le code ressemble à ça :
<shipping-address section="bottom">
<fieldset class="snipcart-form__set">
<hr class="snipcart-form__separator" />
<!-- Gift message -->
<div class="snipcart-form__field">
<snipcart-label class="snipcart__font--tiny" for="Message cadeau">Message cadeau</snipcart-label>
<snipcart-input name="Message cadeau"></snipcart-input>
<p class="snipcart__font--tiny snipcart-form__footer">
(Votre message sera écrit à la main sur une carte, ajoutée au colis)
</p>
</div>
</fieldset>
</shipping-address>
Si vous voulez en voir plus le code source est disponible sur GitHub.
Gestion de contenu (CMS)
La configuration du site, les fiches produit et les pages de contenu sont administrables à la main en éditant les fichiers correspondant, ce qui est suffisant dans la plupart des cas.
Néanmoins il peut s’avérer plus commode et plus agréable de pouvoir s’appuyer sur un CMS : dans le cas de Paysages à vélo, j’ai retenu Forestry pour sa simplicité de mise en œuvre et d’utilisation.
De plus Forestry offre un fonctionnalité de prévisualisation, en contexte, très efficace !
Conclusion
J’ai pris beaucoup de plaisir à réaliser ce petit site e-commerce, principalement grâce à Snipcart qui m’a permis d’être libre sur la création du site web catalogue tout en offrant des options de personnalisation du tunnel d’achat relativement simples à mettre en œuvre (j’aurais d’ailleurs pu également parler de la possibilité de personnaliser les frais de port via webhook).
Et surtout : l’utilisatrice du site est autonome sur la gestion des contenus, la création de nouveaux produits et la gestion des commandes, ce qui est finalement le plus important pour la réussite d’un site e-commerce ! 🛒😊
Enfin, je vous invite à :
- Étudier le code source du projet si vous souhaitez en savoir plus et vous inspirer ;
- Jeter un œil à mon générateur de site statique : Cecil ;
- Consulter le site officiel de Snipcart.