Il arrive qu'un design prévoit l'affichage d'une image à une position spécifique dans le template d'une page web, comme par exemple pour implémenter un effet parallaxe. Si l'on souhaite donner à l'utilisateur la possibilité de choisir cette image, il faut alors ajouter un champ image dans le type de document de la page concernée.
Dans ce tutoriel, nous allons ajouter un champ servant à uploader une image, au niveau de l'édition de la page d'accueil, dans l'espace d'administration.
Éditez le fichier site-schema.json
du site web. Repérez le type de document de la page d'accueil, c'est celui qui contient la ligne "typeName": "home"
. Il est possible que la propriété "fields"
soit déjà présente s'il y a déjà d'autres champs sur la page d'accueil. Dans ce cas, insérez simplement le nouveau champ dans la liste. Sinon, insérez (par exemple, juste sous la ligne "typeName": "home"
) une liste des champs pour le type de document, de cette manière :
"fields": [ { "name": "myImage", "storedOn": "leaf", "storedAs": "mediaHandle", "dataType": "media", "accept": "image/*", "refuse": "image/svg+xml", "useAsDefaultImage": 1, "visibility": ["table", "overview", "feed"] } ],
Explications :
"name": "myImage"
: la clé du champ est myImage
."storedOn": "leaf"
: dans le cas d'un site multilingue, la même image sera partagée par toutes les traductions du document."storedAs": "mediaHandle"
et "dataType": "media"
: le champ est stocké dans la base des médias et ne contient qu'un seul média."accept": "image/*"
: le champ accepte les fichiers dont le type MIME est celui d'une image."refuse": "image/svg+xml"
: le champ refusera les images SVG."useAsDefaultImage": 1
: l'image du champ sera utilisée en tant qu'image par défaut."visibility": ["table", "overview", "feed"]
: la liste de visibilité sert à savoir où le champ sera affiché dans l'espace d'administration ("table"
, "overview"
) et dans le flux RSS ("feed"
).À propos de l'image par défaut : la propriété optionnelle "useAsDefaultImage"
sert à spécifier que le champ est utilisé pour fournir l'image doc.defaultImage
dans les templates Liquid. L'image par défaut est récupérée de la manière suivante : si la featured image existe, elle est aussi l'image par défaut. Sinon, l'image sera celle du premier champ contenant une image et dont la propriété "useAsDefaultImage"
est définie. Le numéro donne l'ordre dans lequel les champs sont traités.
Si l'image contient du contenu localisé, comme un texte, définissez "storedOn": "section"
et elle sera différente pour chaque traduction du document.
Rafraîchissez l'espace d'administration et éditez la page d'accueil. Notre champ devrait apparaître :
Éditer le fichier site-schema.l10n.fr.json
. Dans la section "home"
, ajouter :
"fields": { "myImage": { "label": "Mon image" } }
Rafraîchissez l'espace d'administration : le libellé du champ est maintenant traduit.
Profitez-en pour uploader une image avant de passer à la section suivante.
Éditons le template Liquid de la page d'accueil. Il s'agit du fichier theme/templates/home.liquid
. Ajoutez quelque part le code pour inspecter la payload du document :
{{ doc | info }}
En affichant le résultat dans le navigateur, on peut repérer notre champ dans la payload :
Voici une manière de l'utiliser pour produire du code HTML :
{% if doc.field.myImage %} {% useImage myImage uid: doc.field.myImage.uid size: "x800x" %} <img src="{{ myImage.url }}" width="{{ myImage.width }}" height="{{ myImage.height }}" alt="" loading="lazy" data-zoom-src="{{ doc.field.myImage.uid | imageZoomUrl }}"> {% endif %}