Structure des fichiers
Comprendre la structure des fichiers Drupal est essentiel pour naviguer efficacement dans un projet et savoir où placer vos personnalisations.
🗂️ Vue d’ensemble
Section intitulée « 🗂️ Vue d’ensemble »Répertoiretailstore/ (Racine du projet)
- composer.json
- composer.lock
Répertoireconfig/ (Configuration exportée)
Répertoiresync/
- …
Répertoirevendor/ (Dépendances - NE PAS MODIFIER)
- …
Répertoireweb/ (Racine web / Docroot)
Répertoirecore/ (Cœur Drupal - NE PAS MODIFIER)
- …
Répertoiremodules/
Répertoirecontrib/ (Modules téléchargés)
- …
Répertoirecustom/ (Vos modules)
- …
Répertoirethemes/
Répertoirecontrib/ (Thèmes téléchargés)
- …
Répertoirecustom/ (Vos thèmes)
- …
Répertoiresites/
Répertoiredefault/
Répertoirefiles/ (Fichiers uploadés)
- …
- settings.php (Configuration)
- index.php (Point d’entrée)
- .htaccess (Config Apache)
📁 Détail des dossiers
Section intitulée « 📁 Détail des dossiers »📦 Racine du projet
Section intitulée « 📦 Racine du projet »| Dossier/Fichier | Description |
|---|---|
composer.json | Configuration des dépendances |
composer.lock | Versions verrouillées |
vendor/ | Bibliothèques PHP (généré par Composer) |
config/sync/ | Configuration exportée (YAML) |
web/ | Racine web (docroot) |
🌐 Dossier web/
Section intitulée « 🌐 Dossier web/ »C’est le docroot - le seul dossier accessible depuis le navigateur.
web/core/
Section intitulée « web/core/ »Le cœur de Drupal. Contient :
core/├── includes/ # Fichiers d'inclusion PHP├── lib/ # Classes Drupal (Drupal\Core\...)├── modules/ # Modules du core (node, user, views, etc.)├── themes/ # Thèmes du core (Olivero, Stark, Claro)├── profiles/ # Profils d'installation├── assets/ # CSS, JS, images du core└── core.services.yml # Définition des servicesweb/modules/
Section intitulée « web/modules/ »modules/├── contrib/ # Modules téléchargés via Composer│ ├── admin_toolbar/│ ├── pathauto/│ └── webform/└── custom/ # VOS modules personnalisés └── tailstore_custom/web/themes/
Section intitulée « web/themes/ »themes/├── contrib/ # Thèmes téléchargés│ └── bootstrap/└── custom/ # VOS thèmes personnalisés └── tailstore/web/sites/
Section intitulée « web/sites/ »sites/├── default/│ ├── settings.php # Configuration principale│ ├── settings.local.php # Config locale (optionnel)│ ├── services.yml # Services personnalisés│ └── files/ # Fichiers uploadés│ ├── css/ # CSS agrégé│ ├── js/ # JS agrégé│ └── styles/ # Images dérivées└── sites.php # Multi-site (optionnel)📋 Dossier config/
Section intitulée « 📋 Dossier config/ »config/└── sync/ # Configuration exportée ├── system.site.yml ├── node.type.product.yml ├── field.field.node.product.*.yml └── views.view.products.ymlCe dossier contient les fichiers YAML exportés par drush cex. C’est le cœur du système de configuration sync.
📄 Fichiers importants
Section intitulée « 📄 Fichiers importants »composer.json
Section intitulée « composer.json »{ "name": "drupal/recommended-project", "require": { "drupal/core-recommended": "^11.0", "drupal/admin_toolbar": "^3.4", "drush/drush": "^13.0" }, "extra": { "installer-paths": { "web/modules/contrib/{$name}": ["type:drupal-module"], "web/themes/contrib/{$name}": ["type:drupal-theme"] } }}web/sites/default/settings.php
Section intitulée « web/sites/default/settings.php »Fichier de configuration principal :
<?php
// Configuration de la base de données$databases['default']['default'] = [ 'database' => 'tailstore', 'username' => 'db', 'password' => 'db', 'host' => 'db', 'driver' => 'mysql',];
// Chemin vers la configuration sync$settings['config_sync_directory'] = '../config/sync';
// Salt pour les hashs$settings['hash_salt'] = 'VOTRE_HASH_UNIQUE';
// Trusted hosts$settings['trusted_host_patterns'] = [ '^tailstore\.ddev\.site$', '^localhost$',];web/sites/default/settings.local.php
Section intitulée « web/sites/default/settings.local.php »Configuration locale (non commitée) :
<?php
// Activer le mode développement$config['system.performance']['css']['preprocess'] = FALSE;$config['system.performance']['js']['preprocess'] = FALSE;
// Afficher les erreurs$config['system.logging']['error_level'] = 'verbose';
// Désactiver le cache de rendu$settings['cache']['bins']['render'] = 'cache.backend.null';
// Clés Stripe (dev)$settings['stripe_public_key'] = 'pk_test_xxxx';$settings['stripe_secret_key'] = 'sk_test_xxxx';.gitignore recommandé
Section intitulée « .gitignore recommandé »# Dépendances/vendor//web/core//web/modules/contrib//web/themes/contrib//web/profiles/contrib/
# Fichiers générés/web/sites/default/files//web/sites/default/settings.local.php
# IDE.idea/.vscode/
# OS.DS_StoreThumbs.db
# DDEV.ddev/.gitignore🏗️ Structure d’un module custom
Section intitulée « 🏗️ Structure d’un module custom »web/modules/custom/tailstore_custom/├── tailstore_custom.info.yml # Métadonnées├── tailstore_custom.module # Hooks├── tailstore_custom.routing.yml # Routes├── tailstore_custom.services.yml # Services├── src/│ ├── Controller/│ │ └── CartController.php│ ├── Form/│ │ └── SearchForm.php│ └── Service/│ └── CartService.php├── templates/│ └── cart-dropdown.html.twig└── css/ └── styles.css🎨 Structure d’un thème custom
Section intitulée « 🎨 Structure d’un thème custom »web/themes/custom/tailstore/├── tailstore.info.yml # Métadonnées├── tailstore.libraries.yml # CSS/JS├── tailstore.theme # Hooks de thème├── logo.svg # Logo├── screenshot.png # Capture d'écran├── templates/│ ├── layout/│ │ └── page.html.twig│ ├── node/│ │ └── node--product.html.twig│ └── views/│ └── views-view--products.html.twig├── css/│ ├── styles.css│ └── custom.css└── js/ └── script.js🌍 Multisite Drupal
Section intitulée « 🌍 Multisite Drupal »Le multisite est une fonctionnalité Drupal permettant de servir plusieurs sites avec une seule installation Drupal. Chaque site peut avoir :
- Sa propre base de données
- Ses propres modules et thèmes activés
- Sa propre configuration
- Son propre système de fichiers
Structure multisite
Section intitulée « Structure multisite »web/sites/├── sites.php # Détermination du site├── default/ # Site principal│ ├── settings.php│ ├── services.yml│ └── files/├── site1.local/ # Deuxième site│ ├── settings.php│ ├── services.yml│ └── files/└── site2.com/ # Troisième site ├── settings.php ├── services.yml └── files/Comment ça marche ?
Section intitulée « Comment ça marche ? »- Détermination du site : Le fichier
sites.phpvérifie le domaine/host de la requête - Configuration par site : Chaque dossier
sites/<nom>/contient sa propre configuration - Base de données dédiée :
settings.phpspécifie quelle BDD utiliser - Isolation : Les fichiers uploadés sont isolés par site
Exemple de sites.php
Section intitulée « Exemple de sites.php »<?php
// Détermination automatique basée sur le domaine HTTP_HOST$sites = [ 'site1.local' => 'site1.local', 'www.site1.local' => 'site1.local', 'site2.com' => 'site2.com', 'www.site2.com' => 'site2.com',];
if (isset($sites[$_SERVER['HTTP_HOST']])) { $site_dir = $sites[$_SERVER['HTTP_HOST']];}Exemple de settings.php (site1.local)
Section intitulée « Exemple de settings.php (site1.local) »<?php
// Configuration spécifique au site 1$databases['default']['default'] = [ 'database' => 'site1_db', 'username' => 'db_user', 'password' => 'db_pass', 'host' => 'db', 'driver' => 'mysql',];
$settings['config_sync_directory'] = '../../config/site1';Cas d’usage
Section intitulée « Cas d’usage »Le multisite est généralement utilisé pour :
- Réseaux de sites : Agences avec plusieurs clients
- Localisation : Un site par langue avec contenu partagé
- Prototypes : Tester plusieurs configurations du même site
Pour la plupart des projets : Une instance Drupal = un domaine. C’est plus simple et plus robuste.
🔍 Où trouver quoi ?
Section intitulée « 🔍 Où trouver quoi ? »| Je cherche… | Emplacement |
|---|---|
| La config de mon site | config/sync/system.site.yml |
| Un type de contenu | config/sync/node.type.*.yml |
| Les champs d’un contenu | config/sync/field.field.node.*.yml |
| Une vue | config/sync/views.view.*.yml |
| Les modules installés | web/modules/contrib/ |
| Mon module custom | web/modules/custom/ |
| Mon thème | web/themes/custom/ |
| Les fichiers uploadés | web/sites/default/files/ |
| La configuration PHP | web/sites/default/settings.php |
✅ Exercice pratique
Section intitulée « ✅ Exercice pratique »-
Explorez la structure de votre projet :
Fenêtre de terminal # Lister les dossiers principauxls -lals -la web/ls -la web/modules/ -
Créez les dossiers pour vos futurs modules et thèmes :
Fenêtre de terminal mkdir -p web/modules/custommkdir -p web/themes/custom -
Vérifiez que le dossier de configuration existe :
Fenêtre de terminal ls -la config/sync/
🚀 Étape suivante
Section intitulée « 🚀 Étape suivante »Passez à la Configuration Sync pour maîtriser l’import/export de configuration.