🛒 PanierGratuit · 0 NahnahPar NAHNAH
Ajouter un don au panier
Carte « Ajoute un don pour [ton association] » : les montants sont les variantes d’un produit « Don » que tu crées dans Shopify, ajoutées au panier par le formulaire Shopify. Un cœur bat et des petits cœurs s’envolent au choix d’un montant. Rien n’est affiché sans produit choisi.
Aperçu en direct
Données de démonstration (produits, menus, textes d’exemple) : dans ta boutique, ce sont les tiennes.
Photos : Unsplash / Pexels (exemples de l’aperçu, jamais inclus dans le code).
Code à copier
Fichier complet sections/nahnah-panier-ajout-don.liquid (Liquid, CSS et JS inclus).
{%- comment -%} NAHNAH AI · Ajouter un don au panier (bibliothèque Sections & effets) {%- endcomment -%}
<div class="nn-panier-ajout-don" style="--nn-mh: {{ section.settings.marge_haut }}px; --nn-mb: {{ section.settings.marge_bas }}px; --nn-fond: {{ section.settings.couleur_fond }}; --nn-texte: {{ section.settings.couleur_texte }}; --nn-accent: {{ section.settings.couleur_accent }};" data-nn-invitation="{{ section.settings.invitation }}">
{%- assign nn_p = section.settings.produit -%}
{%- if nn_p -%}
<div class="nn-panier-ajout-don__carte">
<span class="nn-panier-ajout-don__coeur" aria-hidden="true">❤<span class="nn-panier-ajout-don__envol" data-nn-envol></span></span>
<div class="nn-panier-ajout-don__contenu">
<h2 class="nn-panier-ajout-don__titre">{{ section.settings.titre | escape }}</h2>
{%- if section.settings.texte != blank -%}<p class="nn-panier-ajout-don__texte">{{ section.settings.texte | escape }}</p>{%- endif -%}
{%- form 'product', nn_p -%}
<fieldset class="nn-panier-ajout-don__montants">
<legend class="nn-panier-ajout-don__sr">Montant du don</legend>
{%- for variante in nn_p.variants -%}
<label class="nn-panier-ajout-don__montant"><input type="radio" name="id" value="{{ variante.id }}" data-nn-montant{% if forloop.first %} checked{% endif %}{% unless variante.available %} disabled{% endunless %}><span><b>{{ variante.price | money }}</b>{%- unless variante.title contains 'Default' -%}<small>{{ variante.title | escape }}</small>{%- endunless -%}</span></label>
{%- endfor -%}
</fieldset>
<button type="submit" class="nn-panier-ajout-don__bouton">{{ section.settings.bouton | escape }}</button>
{%- endform -%}
</div>
</div>
{%- elsif request.design_mode -%}
<p class="nn-panier-ajout-don__aide">Crée un produit « Don » (une variante par montant), puis choisis-le dans les réglages.</p>
{%- endif -%}
</div>
{% schema %}
{
"name": "Don au panier",
"tag": "section",
"class": "nn-section-panier-ajout-don",
"settings": [
{
"type": "product",
"id": "produit",
"label": "Produit « Don » (ses variantes = montants)"
},
{
"type": "text",
"id": "titre",
"label": "Titre",
"default": "Un petit geste en plus ?"
},
{
"type": "text",
"id": "texte",
"label": "Texte",
"default": "100 % des dons sont reversés à l’association choisie."
},
{
"type": "text",
"id": "bouton",
"label": "Texte du bouton",
"default": "Ajouter mon don"
},
{
"type": "checkbox",
"id": "invitation",
"label": "Choisir les montants tour à tour",
"default": false,
"info": "Coupé si le visiteur a demandé à réduire les animations."
},
{
"type": "header",
"content": "Couleurs"
},
{
"type": "color",
"id": "couleur_fond",
"label": "Fond",
"default": "#FFF1F2"
},
{
"type": "color",
"id": "couleur_texte",
"label": "Texte",
"default": "#4C0519"
},
{
"type": "color",
"id": "couleur_accent",
"label": "Accent",
"default": "#E11D48"
},
{
"type": "header",
"content": "Espacement"
},
{
"type": "range",
"id": "marge_haut",
"label": "Marge haute",
"min": 0,
"max": 120,
"step": 4,
"unit": "px",
"default": 40
},
{
"type": "range",
"id": "marge_bas",
"label": "Marge basse",
"min": 0,
"max": 120,
"step": 4,
"unit": "px",
"default": 40
}
],
"presets": [
{
"name": "Don au panier"
}
]
}
{% endschema %}
{% stylesheet %}
.nn-panier-ajout-don { padding: var(--nn-mh) 16px var(--nn-mb); background: var(--nn-fond); color: var(--nn-texte); }
.nn-panier-ajout-don__carte { display: flex; gap: 18px; align-items: flex-start; max-width: 600px; margin: 0 auto; padding: 22px; border-radius: 22px; background: #FFFFFF; box-shadow: 0 20px 44px -32px rgba(76, 5, 25, 0.6); }
.nn-panier-ajout-don__coeur { position: relative; flex: none; display: grid; place-items: center; width: 54px; height: 54px; border-radius: 50%; background: #FFE4E6; color: var(--nn-accent); font-size: 26px; animation: nn-panier-ajout-don-bat 1.4s ease-in-out infinite; }
.nn-panier-ajout-don__envol { position: absolute; inset: 0; pointer-events: none; }
.nn-panier-ajout-don__envol i { position: absolute; left: 50%; top: 40%; font-style: normal; font-size: 14px; animation: nn-panier-ajout-don-envol 1.2s ease-out forwards; }
.nn-panier-ajout-don__contenu { flex: 1; min-width: 0; }
.nn-panier-ajout-don__titre { margin: 0 0 4px; font-size: 19px; }
.nn-panier-ajout-don__texte { margin: 0 0 12px; font-size: 14px; opacity: 0.75; }
.nn-panier-ajout-don__montants { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; border: 0; }
.nn-panier-ajout-don__montant { position: relative; cursor: pointer; }
.nn-panier-ajout-don__montant input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.nn-panier-ajout-don__montant span { display: flex; flex-direction: column; align-items: center; justify-content: center; min-width: 76px; min-height: 52px; padding: 4px 12px; border: 1.5px solid rgba(225, 29, 72, 0.3); border-radius: 14px; transition: background-color 0.25s, color 0.25s, transform 0.3s cubic-bezier(0.3, 1.6, 0.5, 1); }
.nn-panier-ajout-don__montant small { font-size: 11px; opacity: 0.75; }
.nn-panier-ajout-don__montant input:checked + span { background: var(--nn-accent); border-color: var(--nn-accent); color: #FFFFFF; transform: scale(1.05); }
.nn-panier-ajout-don__montant input:focus-visible + span { outline: 2px solid var(--nn-accent); outline-offset: 2px; }
.nn-panier-ajout-don__montant input:disabled + span { opacity: 0.4; }
.nn-panier-ajout-don__bouton { min-height: 46px; margin-top: 14px; padding: 0 20px; border: 0; border-radius: 999px; background: var(--nn-texte); color: #FFFFFF; font: inherit; font-weight: 700; cursor: pointer; }
.nn-panier-ajout-don__aide { max-width: 600px; margin: 0 auto; padding: 14px; border: 1px dashed currentColor; border-radius: 12px; font-size: 14px; }
.nn-panier-ajout-don__sr { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
@keyframes nn-panier-ajout-don-bat { 0%, 100% { transform: scale(1); } 15% { transform: scale(1.15); } 30% { transform: scale(0.97); } 45% { transform: scale(1.08); } }
@keyframes nn-panier-ajout-don-envol { from { opacity: 1; transform: translate(-50%, 0) scale(0.6); } to { opacity: 0; transform: translate(calc(-50% + var(--nn-dx, 0px)), -60px) scale(1.2); } }
@media (max-width: 480px) { .nn-panier-ajout-don__carte { flex-direction: column; } }
@media (prefers-reduced-motion: reduce) {
.nn-panier-ajout-don *, .nn-panier-ajout-don *::before, .nn-panier-ajout-don *::after { animation: none !important; transition: none !important; }
}
{% endstylesheet %}
{% javascript %}
(function () {
var reduit = window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
function brancher(racine) {
if (racine.dataset.nnPret) return;
racine.dataset.nnPret = "1";
var envol = racine.querySelector("[data-nn-envol]");
var radios = [].slice.call(racine.querySelectorAll("[data-nn-montant]"));
function coeurs() {
if (reduit || !envol) return;
for (var i = 0; i < 4; i++) { var h = document.createElement("i"); h.textContent = "❤"; h.style.setProperty("--nn-dx", (i * 14 - 21) + "px"); h.style.animationDelay = i * 0.08 + "s"; envol.appendChild(h); setTimeout(function (x) { return function () { x.remove(); }; }(h), 1500); }
}
function marquer() { radios.forEach(function (r) { r.parentNode.classList.toggle("nn-panier-ajout-don__montant--actif", r.checked); }); }
radios.forEach(function (r) { r.addEventListener("change", function () { marquer(); coeurs(); }); });
marquer();
var dispo = radios.filter(function (r) { return !r.disabled; });
if (racine.getAttribute("data-nn-invitation") === "true" && !reduit && dispo.length) { var k = 0; setInterval(function () { k = (k + 1) % dispo.length; dispo[k].checked = true; marquer(); coeurs(); }, 1700); }
}
function tout() { document.querySelectorAll(".nn-panier-ajout-don").forEach(brancher); }
tout();
document.addEventListener("shopify:section:load", tout);
})();
{% endjavascript %}
Licence NAHNAH AI : utilisation libre dans tes boutiques (y compris commerciales), modification permise, revente de l’élément seul interdite.
Prompt à copier
À coller dans Claude ou ChatGPT avec le fichier téléchargé (ou le code copié) : l’assistant t’aide à l’installer et à l’adapter à ta marque.
Tu es un expert des thèmes Shopify Online Store 2.0. Aide-moi à installer puis à adapter à ma marque cet élément gratuit de la bibliothèque NAHNAH AI.
Élément : « Ajouter un don au panier » (Panier)
Description : Carte « Ajoute un don pour [ton association] » : les montants sont les variantes d’un produit « Don » que tu crées dans Shopify, ajoutées au panier par le formulaire Shopify. Un cœur bat et des petits cœurs s’envolent au choix d’un montant. Rien n’est affiché sans produit choisi.
Page de l’élément (aperçu en direct) : https://ai.nahnah.shop/bibliotheque-shopify/panier-ajout-don
Fichier : nahnah-panier-ajout-don.liquid (bouton « Télécharger » de la page) ou le code copié avec le bouton « Copier » : je te le joins ou je le colle après ce message.
Emplacement dans le thème : sections/nahnah-panier-ajout-don.liquid (Liquid, puis {% stylesheet %} et {% javascript %}, dans ce seul fichier).
Étapes d’installation :
1. Dans Shopify : Boutique en ligne → Thèmes → bouton « … » du thème → Modifier le code.
2. Dossier « sections » → « Ajouter une section » (ou « Nouveau fichier ») → nomme-la « nahnah-panier-ajout-don ».
3. Efface le contenu proposé, colle le code de l’onglet Liquid (fichier complet), puis Enregistrer.
4. Ouvre Personnaliser → Ajouter une section → choisis-la, règle les textes et les couleurs, puis Enregistrer.
Ce que j’attends de toi :
- Guide-moi pas à pas dans Shopify : Boutique en ligne → Thèmes → « … » → Modifier le code → dossier sections → Ajouter une section, puis Personnaliser → Ajouter une section.
- Propose-moi d’adapter les couleurs, les textes et les liens à ma marque : demande d’abord mes couleurs (codes hexadécimaux), mon ton et mes liens.
- Garde le bloc {% schema %} et tous ses réglages (identifiants, types, presets) : je dois pouvoir tout régler ensuite dans l’éditeur de thème.
- Rends-moi le fichier complet modifié, prêt à coller, sans faux avis, fausse urgence ni chiffre inventé.
Si tu as le connecteur NAHNAH AI (MCP), récupère directement le code exact avec l’outil obtenir_code_element (id : panier-ajout-don).Installer dans ma boutique
En un clic, la section est ajoutée à un thème de ta boutique Shopify connectée (un thème non publié par défaut).
Chargement de tes boutiques…
Installer dans Shopify
- Dans Shopify : Boutique en ligne → Thèmes → bouton « … » du thème → Modifier le code.
- Dossier « sections » → « Ajouter une section » (ou « Nouveau fichier ») → nomme-la « nahnah-panier-ajout-don ».
- Efface le contenu proposé, colle le code de l’onglet Liquid (fichier complet), puis Enregistrer.
- Ouvre Personnaliser → Ajouter une section → choisis-la, règle les textes et les couleurs, puis Enregistrer.
Installer via le MCP
Depuis Claude, Claude Code ou ChatGPT connecté à NAHNAH AI, demande : « Donne-moi le code de l’élément panier-ajout-don de la bibliothèque NAHNAH AI et les étapes pour l’installer ». L’assistant récupère le code et les étapes (outil obtenir_code_element), gratuitement.
Boutique connectée à NAHNAH AI : l’assistant peut aussi l’installer directement (outil installer_element).
Connecter le MCP