Durée estimée : 20 minutes
Installer et activer tous les modules contributifs nécessaires.
À la fin de ces exercices, vous aurez :
Durée estimée : 20 minutes
Installer et activer tous les modules contributifs nécessaires.
Préparer l’environnement TailStore avec tous les modules.
Installer les modules avec Composer
ddev composer require \ drupal/pathauto \ drupal/token \ drupal/metatag \ drupal/webform \ drupal/redirect \ drupal/simple_sitemap \ drupal/admin_toolbar \ drupal/gin \ drupal/honeypotActiver les modules
ddev drush en \ pathauto token \ metatag metatag_open_graph metatag_twitter_cards \ webform webform_ui \ redirect simple_sitemap \ admin_toolbar admin_toolbar_tools \ honeypot -yConfigurer Gin comme thème admin
ddev drush theme:enable gin -yddev drush config-set system.theme admin gin -yVérifier l’installation
ddev drush pm:list --status=enabled --format=tablecomposer.json)drush pm:list --status=enabled)drush ws pour watchdog)ddev drush cex -y)💡 Commit après installation :
git add composer.json composer.lock config/git commit -m "feat(modules): install contrib modules (pathauto, metatag, webform, admin_toolbar, gin, honeypot)"💡 Déploiement sur autre environnement :
# Sur staging/productioncomposer installdrush cim -ydrush crDurée estimée : 25 minutes
Configurer les URLs automatiques pour tous les contenus.
Créer des modèles d’URL propres pour chaque type.
Accéder à Pathauto
/admin/config/search/path/patterns
Créer le modèle Produits
boutique/[node:field_category:entity:name]/[node:title]Créer le modèle Articles
blog/[node:created:custom:Y-m]/[node:title]Créer le modèle Catégories
categories/[term:name]Créer le modèle Marques
marques/[term:name]Configurer les paramètres généraux
/admin/config/search/path/settings
Séparateur: "-"Casse: MinusculesLongueur max: 100Générer les alias existants
ddev drush pathauto:aliases-generate allCréez un produit “Pantalon Cargo” dans la catégorie “Pantalons”.
URL attendue : /boutique/pantalons/pantalon-cargo
Créez un article de blog “Tendances mode hiver 2026” publié le 14 janvier 2026.
URL attendue : /blog/2026-01/tendances-mode-hiver-2026
- appliqué# Lister les alias générésddev drush sqlq "SELECT alias, path FROM path_alias LIMIT 10"
# Vérifier un alias spécifiqueddev drush path:alias /node/42
# Compter les alias par typeddev drush sqlq "SELECT COUNT(*) FROM path_alias WHERE path LIKE '/node/%'"Durée estimée : 30 minutes
Optimiser les métadonnées pour le référencement.
Configurer Metatag pour les produits et le partage social.
Configuration globale
/admin/config/search/metatag
Modifier Global :
Titre: "[current-page:title] | TailStore"Description: "TailStore - Votre boutique de mode en ligne"Configuration Produit
Ajouter un modèle pour Contenu: Produit :
Basique :
Titre: "[node:title] - [node:field_price:value]€ | TailStore"Description: "[node:field_description:summary]"Open Graph :
og:type: "product"og:title: "[node:title]"og:description: "[node:field_description:summary]"og:image: "[node:field_images:entity:url]"og:site_name: "TailStore"Twitter Cards :
twitter:card: "summary_large_image"twitter:title: "[node:title]"twitter:description: "[node:field_description:summary]"twitter:image: "[node:field_images:entity:url]"Configuration Article Blog
Ajouter un modèle pour Contenu: Article Blog :
og:type: "article"article:published_time: "[node:created:html_datetime]"article:author: "[node:author:display-name]"Créer un style d’image Open Graph
/admin/config/media/image-styles/add
opengraph<meta property="og:..."<meta property="og: (Ctrl+F)Attendu :
<meta property="og:type" content="product" /><meta property="og:title" content="T-Shirt Blanc - 29.99€ | TailStore" /><meta property="og:description" content="T-shirt en coton bio..." /><meta property="og:image" content="https://tailstore.ddev.site/sites/default/files/2026-01/tshirt.jpg" /><meta property="og:site_name" content="TailStore" /><meta property="og:url" content="https://tailstore.ddev.site/boutique/t-shirts/t-shirt-blanc" />
<meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="T-Shirt Blanc - 29.99€ | TailStore" /><meta name="twitter:description" content="T-shirt en coton bio..." /><meta name="twitter:image" content="https://tailstore.ddev.site/sites/default/files/2026-01/tshirt.jpg" />Facebook :
Twitter :
Durée estimée : 35 minutes
Créer un formulaire de contact complet avec notifications.
Créer le formulaire de contact TailStore avec emails automatiques.
Créer le webform
/admin/structure/webform/add
contactAjouter les éléments
| Ordre | Type | Clé | Libellé | Requis |
|---|---|---|---|---|
| 1 | Fieldset | personal_info | Vos informations | - |
| 2 | Text | name | Nom complet | ✅ |
| 3 | ✅ | |||
| 4 | Tel | phone | Téléphone | ❌ |
| 5 | Fieldset | message_info | Votre message | - |
| 6 | Select | subject | Sujet | ✅ |
| 7 | Textarea | message | Message | ✅ |
Options du sujet :
general|Question généraleorder|Suivi de commandereturn|Retour produitpartnership|Partenariatother|AutreConfigurer l’email admin
/admin/structure/webform/manage/contact/handlers
Ajouter un Email handler :
Titre: Notification équipeDestinataire: contact@tailstore.comSujet: "[TailStore] [webform_submission:values:subject] - [webform_submission:values:name]"Corps: | Un nouveau message a été reçu sur TailStore.
=== Expéditeur === Nom: [webform_submission:values:name] Email: [webform_submission:values:email] Téléphone: [webform_submission:values:phone]
=== Message === Sujet: [webform_submission:values:subject]
[webform_submission:values:message]
--- Répondre directement à cet email pour contacter le client.
Répondre à: [webform_submission:values:email]Configurer l’email confirmation
Ajouter un second Email handler :
Titre: Confirmation clientDestinataire: [webform_submission:values:email]Sujet: "Votre message a bien été reçu - TailStore"Corps: | Bonjour [webform_submission:values:name],
Nous avons bien reçu votre message concernant "[webform_submission:values:subject]".
Notre équipe vous répondra dans les 48 heures ouvrées.
Cordialement, L'équipe TailStore
--- Ceci est un message automatique, merci de ne pas y répondre.Configurer le message de confirmation
/admin/structure/webform/manage/contact/settings/confirmation
Type: PageTitre: Merci pour votre message !Message: | Votre message a été envoyé avec succès. Nous vous répondrons dans les plus brefs délais.Ajouter le formulaire à une page
Créez une page “Contact” et intégrez le bloc Webform.
Accéder au formulaire
/form/contact
Test validation
test → Erreur format ?Test soumission valide
Remplissez tous les champs et soumettez
Vérifier l’email admin
# Voir les emails capturés par DDEV (mailpit)ddev launch -mOu accédez à : https://tailstore.ddev.site:8026
Vérifier la soumission
/admin/structure/webform/manage/contact/results/submissions
Ajoutez des classes CSS TailStore :
# Sur chaque champwrapper_attributes: class: 'mb-4'
attributes: class: 'w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500'
# Sur le bouton submitattributes: class: 'btn btn-primary w-full md:w-auto'Durée estimée : 30 minutes
Créer un formulaire multi-étapes pour les demandes de devis.
Créer un formulaire plus complexe avec wizard et champs conditionnels.
Créer le webform
quote_requestPage 1 : Informations
wizard_page_1: type: wizard_page title: "Vos informations"
name: type: textfield title: "Nom complet" required: true
email: type: email title: "Email" required: true
company: type: textfield title: "Entreprise"
phone: type: tel title: "Téléphone" required: truePage 2 : Produits
wizard_page_2: type: wizard_page title: "Produits souhaités"
products: type: checkboxes title: "Catégories de produits" options: clothing: "Vêtements" shoes: "Chaussures" accessories: "Accessoires"
quantity: type: select title: "Quantité estimée" options: 10_50: "10 à 50 pièces" 50_100: "50 à 100 pièces" 100_500: "100 à 500 pièces" 500_plus: "Plus de 500 pièces"
details: type: textarea title: "Description des besoins"Page 3 : Budget et délai
wizard_page_3: type: wizard_page title: "Budget et planning"
budget: type: radios title: "Budget estimé" options: small: "Moins de 1 000€" medium: "1 000€ - 5 000€" large: "5 000€ - 20 000€" enterprise: "Plus de 20 000€"
deadline: type: date title: "Date souhaitée de livraison"
urgency: type: radios title: "Niveau d'urgence" options: low: "Faible - Plusieurs mois" medium: "Moyen - 1 à 2 mois" high: "Élevé - Moins d'un mois"Configurer la progression
Configurer les emails
Créer des emails personnalisés avec toutes les infos.
Exemple de configuration email :
Titre: Demande de devisDestinataire: devis@tailstore.comSujet: "[TailStore] Nouvelle demande de devis - [webform_submission:values:company]"Corps: | === NOUVELLE DEMANDE DE DEVIS ===
Date: [webform_submission:created:custom:d/m/Y à H:i]
--- Informations client --- Nom: [webform_submission:values:name] Email: [webform_submission:values:email] Téléphone: [webform_submission:values:phone] Entreprise: [webform_submission:values:company]
--- Produits demandés --- Catégories: [webform_submission:values:products] Quantité: [webform_submission:values:quantity] Détails: [webform_submission:values:details]
--- Budget et planning --- Budget estimé: [webform_submission:values:budget] Date souhaitée: [webform_submission:values:deadline:custom:d/m/Y] Urgence: [webform_submission:values:urgency]
--- Voir la soumission complète : [webform_submission:url]Durée estimée : 15 minutes
Générer un sitemap pour les moteurs de recherche.
Configurer Simple Sitemap pour indexer tous les contenus.
Configuration du sitemap
/admin/config/search/simplesitemap
Activer les types de contenu
Pour chaque entité, configurer :
| Type | Indexer | Priorité |
|---|---|---|
| Produit | ✅ | 0.8 |
| Article Blog | ✅ | 0.6 |
| Page | ✅ | 0.5 |
| Catégorie | ✅ | 0.7 |
| Marque | ✅ | 0.6 |
Générer le sitemap
ddev drush simple-sitemap:generateVérifier
Accédez à /sitemap.xml
Soumettre à Google
Dans Google Search Console, soumettez l’URL du sitemap.
# Générer le sitemapddev drush simple-sitemap:generate
# Voir le contenucurl https://tailstore.ddev.site/sitemap.xml
# Ou dans le navigateurExemple de sortie attendue :
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://tailstore.ddev.site/</loc> <priority>1.0</priority> </url> <url> <loc>https://tailstore.ddev.site/boutique/t-shirts/t-shirt-blanc</loc> <priority>0.8</priority> </url> <url> <loc>https://tailstore.ddev.site/blog/2026-01/tendances-mode-hiver</loc> <priority>0.6</priority> </url></urlset>Exclure certains contenus :
# Configuration → Simple Sitemap → Entités# Pour chaque type, définir :Inclure: Oui/NonPriorité: 0.1 - 1.0Changefreq: daily, weekly, monthly, yearlyMulti-sitemap (pour gros sites) : Simple Sitemap génère automatiquement plusieurs sitemaps si > 50 000 URLs
Durée estimée : 15 minutes
Protéger les formulaires contre le spam.
Configurer Honeypot et limiter les soumissions.
Vérifier Honeypot
/admin/config/content/honeypot
Protéger tous les formulaires: OuiDélai minimum: 5 secondesLimiter les soumissions Webform
Pour chaque formulaire :
/admin/structure/webform/manage/[id]/settings/submissions
Limite par utilisateur: 3 par jourLimite totale: 50 par jourMessage: "Vous avez atteint la limite..."Tester
Essayez de soumettre trop rapidement (< 5 secondes).
Accéder au formulaire : /form/contact
Ouvrir les outils développeur (F12)
Inspecter le formulaire
Chercher un champ caché (probablement <input name="url" type="text" style="display:none">)
Tester la soumission rapide
Remplir et soumettre en < 5 secondes → Refus attendu
Tester après délai
Attendre > 5 secondes puis soumettre → Succès attendu
# Simuler plusieurs soumissionsddev drush webform:test contact --num=4
# La 4ème devrait être refusée si limite = 3Ou testez manuellement en soumettant le formulaire 4 fois.
Surveiller les tentatives de spam :
# Voir les soumissions récentesddev drush sqlq "SELECT * FROM webform_submission ORDER BY created DESC LIMIT 10"
# Logs Honeypot# Rapports → Journaux récents → Filtrer "honeypot"Ajuster les paramètres si nécessaire :
Modules installés
✅ 9 modules contributifs ✅ Configuration complète ✅ Tests validés
URLs propres
✅ Pathauto configuré ✅ Modèles pour tous types ✅ Translittération active
SEO optimisé
✅ Metatag complet ✅ Open Graph + Twitter ✅ Sitemap XML généré
Formulaires
✅ Contact fonctionnel ✅ Devis multi-étapes ✅ Anti-spam actif
drush cex -y)config/sync/# Exporter toute la configurationddev drush cex -y
# Vérifier les fichiers exportésls -la config/sync/ | grep -E "(pathauto|metatag|webform)"
# Commitgit add composer.json composer.lock config/git commit -m "feat(step7): configure contrib modules (pathauto, metatag, webform, sitemap, security)
- URLs automatiques avec Pathauto pour tous les types de contenu- SEO optimisé avec Metatag, Open Graph, Twitter Cards- Formulaires contact et devis avec Webform- Sitemap XML pour moteurs de recherche- Sécurité anti-spam avec Honeypot- Interface admin améliorée avec Gin et Admin Toolbar"
git push origin main/boutique/t-shirts/t-shirt-blanc au lieu de /node/42Les modules sont configurés ! Dans l’Étape 8, nous développerons nos propres modules custom pour les fonctionnalités spécifiques à TailStore.