# 9. Gestion de contenu, boutique en ligne et dropshipping

## 9.1 Gestion de contenu (tous les sites)

**Éditeur visuel** (Tiptap) pour les pages, articles et outils : titres, gras/italique/souligné/barré, listes, citations, alignement, liens, images de la médiathèque, vidéos YouTube (mode confidentialité renforcée), tableaux (ajout/suppression de lignes et colonnes, en-tête), séparateurs, annuler/rétablir, vue « code HTML ». Le HTML est nettoyé côté serveur (`symfony/html-sanitizer`) : aucun script, attribut `on…`, lien `javascript:` ni iframe autre que YouTube/Vimeo ne passe. Les articles existants en Markdown restent valides ; le bouton « Visuel » les convertit.

**Blocs** (onglet Pages → bouton « Page de présentation » ou « Ajouter un bloc ») : bandeau d'accueil, texte riche, image et texte, image, galerie (agrandissement au clic), vidéo, points forts (icônes), cartes de liens, appel à l'action, boutons, FAQ (données structurées FAQPage), témoignages, chiffres clés, tarifs, derniers articles, outils du site, produits de la boutique, formulaire de contact, séparateur, emplacement publicitaire.
- Chaque bloc a ses champs (textes, images, liens, couleurs, disposition, éléments répétables) et une apparence commune : fond (aucun, teinte, couleur principale/secondaire, sombre, couleur libre — contraste du texte calculé automatiquement), espacement, ancre.
- Ajouter (à la fin ou entre deux blocs), modifier, dupliquer, masquer, supprimer, réordonner (glisser-déposer ou flèches), enregistrer un bloc dans « Mes blocs » pour le réutiliser.
- Définition des blocs : `app/Services/Cms/Blocks.php` ; rendu : `resources/views/themes/default/blocks/{type}.blade.php` (surchargeable par thème).
- Traduction automatique : seuls les textes des blocs sont traduits (pas les liens, couleurs ni réglages).

**Mise en page** : « Titre + contenu » ou « Pleine largeur » ; case « Utiliser comme page d'accueil » (remplace l'accueil automatique du thème, URL `/`, l'ancienne adresse redirige en 301).

**Statuts** : brouillon, à relire, publié ; avec une date future la page est **programmée** et mise en ligne automatiquement (`content:publish-due`, chaque minute, renouvelle le cache du site). **Aperçu** : bouton « Aperçu » = rendu avec le thème du site du contenu en cours, sans l'enregistrer (noindex, sans publicité). **Dupliquer** une page crée un brouillon.

**Médiathèque** (onglet du site) : images, vidéos, sons, PDF et documents bureautiques ; envoi par morceaux (pas de limite de taille imposée par le site), type réel vérifié (SVG, HTML et scripts refusés), miniature WebP générée, texte alternatif, recherche et filtres, « utilisé dans… » avant suppression. Utilisable depuis l'éditeur, les blocs, les produits.

**Règles AdSense des blocs « Emplacement publicitaire »** : jamais en premier ni en dernier, jamais à côté d'un bandeau, d'un bouton, d'un tarif ou d'un formulaire, 3 au maximum par page, et respect du réglage « Aucune publicité » et du minimum de mots du site.

## 9.2 Boutique en ligne (module « shop ») — site Maison Aurore

Catalogue : rayons et sous-rayons, collections, recherche, filtres (prix, stock, promotions), tri ; fiches produit avec galerie, variantes (jusqu'à 3 options, prix/stock/SKU/image par variante), caractéristiques, estimation de livraison, données structurées `Product`/`Offer` (aucune note inventée).

Panier stocké sur l'appareil, **prix toujours recalculés par le serveur** (stock, campagnes, code promo, livraison, TVA). Commande sans compte ; paiement par **carte (Stripe Checkout)**, **virement** ou **à la livraison** ; page de suivi privée (lien secret) : statut, suivi colis, facture imprimable, téléchargements (produits numériques, nombre limité), demande de retour, messages. E-mails au client à chaque étape et au vendeur.

Back-office (onglet **Boutique**) : tableau de bord (CA, commandes, panier moyen, marge nette estimée, meilleures ventes, stock bas, à traiter), commandes (filtres, statut + suivi, paiement reçu → facture numérotée, remboursement total/partiel avec remise en stock — via Stripe pour la carte, messages, retours, export CSV comptable), produits (import/export CSV, duplication), rayons, collections, clients (export), codes promo (%, montant, livraison offerte, minimum, limites, dates, une fois par client), campagnes (réduction automatique datée sur tout ou partie du catalogue + bandeau), livraison (pays, prix, gratuité dès, poids max, délais), réglages (devise, TVA TTC/HT, pays, moyens de paiement, clés Stripe chiffrées, frais pour la marge, préfixe de commande, délai de retour, mentions de facture, bandeau d'annonce).

**Mise en service du paiement par carte** : clé `sk_test_…` (Réglages ou `STRIPE_SECRET`), webhook Stripe vers `https://<domaine>/api/boutique/stripe` (événement `checkout.session.completed`) et son secret `whsec_…`. Tester avec la carte 4242 4242 4242 4242 avant de passer aux clés `sk_live_…`. Les commandes par carte non payées sont annulées après 3 jours (`shop:cancel-unpaid`, stock rendu).

**Pages obligatoires** créées en brouillon : CGV, Livraison et retours (en plus d'À propos, Contact, Confidentialité, Mentions légales) — à compléter et faire valider avant l'ouverture.

## 9.3 Dropshipping (modules « shop » + « dropshipping ») — site Nomadeo

Fournisseurs : coordonnées, **règle de prix** (prix d'achat × marge % + montant fixe, arrondi ,99/,90/euro), frais d'expédition fournisseur, délais de préparation et de transport (affichés sur les fiches), **flux catalogue CSV ou JSON** (colonnes configurables, jeton chiffré) : synchronisation des prix d'achat, prix de vente et stocks (manuelle ou toutes les 6 h, `shop:sync-suppliers`), import des nouvelles références **en brouillon**. Les références absentes du flux passent en rupture. Les flux pointant vers un réseau privé sont refusés (SSRF).

Commandes : chaque ligne d'un produit fournisseur est suivie (« à commander », commandé + n° fournisseur, expédié + suivi, livré, problème) ; quand toutes les lignes sont expédiées, la commande passe en « Expédiée » et le client est prévenu. Marge calculée par commande : HT − remboursements − coûts d'achat − frais de paiement − frais fournisseur.

**À savoir** : les intégrations directes avec des plateformes de fournisseurs (API propriétaires) ne sont pas incluses ; tout fournisseur capable de fournir un fichier CSV/JSON (URL ou fichier envoyé) est compatible. Indiquez des délais honnêtes et respectez le droit de rétractation.

## 9.4 Thèmes ajoutés

- **boutique** : e-commerce élégant (titres serif, logo centré, bandeau d'annonce, grandes images).
- **market** : dropshipping dynamique (barre sombre avec grande recherche, rayons en pastilles, bons plans, transparence sur les délais).

Les produits de démonstration utilisent des illustrations générées : remplacez-les par vos photos, textes et prix.
