Aller au contenu

Structure des fichiers

Comprendre la structure des fichiers Drupal est essentiel pour naviguer efficacement dans un projet et savoir où placer vos personnalisations.

  • 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)
Dossier/FichierDescription
composer.jsonConfiguration des dépendances
composer.lockVersions verrouillées
vendor/Bibliothèques PHP (généré par Composer)
config/sync/Configuration exportée (YAML)
web/Racine web (docroot)

C’est le docroot - le seul dossier accessible depuis le navigateur.

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 services
modules/
├── contrib/ # Modules téléchargés via Composer
│ ├── admin_toolbar/
│ ├── pathauto/
│ └── webform/
└── custom/ # VOS modules personnalisés
└── tailstore_custom/
themes/
├── contrib/ # Thèmes téléchargés
│ └── bootstrap/
└── custom/ # VOS thèmes personnalisés
└── tailstore/
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)
config/
└── sync/ # Configuration exportée
├── system.site.yml
├── node.type.product.yml
├── field.field.node.product.*.yml
└── views.view.products.yml

Ce dossier contient les fichiers YAML exportés par drush cex. C’est le cœur du système de configuration sync.

{
"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"]
}
}
}

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$',
];

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';
# 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_Store
Thumbs.db
# DDEV
.ddev/.gitignore
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
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

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
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/
  1. Détermination du site : Le fichier sites.php vérifie le domaine/host de la requête
  2. Configuration par site : Chaque dossier sites/<nom>/ contient sa propre configuration
  3. Base de données dédiée : settings.php spécifie quelle BDD utiliser
  4. Isolation : Les fichiers uploadés sont isolés par site
<?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']];
}
<?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';

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.

Je cherche…Emplacement
La config de mon siteconfig/sync/system.site.yml
Un type de contenuconfig/sync/node.type.*.yml
Les champs d’un contenuconfig/sync/field.field.node.*.yml
Une vueconfig/sync/views.view.*.yml
Les modules installésweb/modules/contrib/
Mon module customweb/modules/custom/
Mon thèmeweb/themes/custom/
Les fichiers uploadésweb/sites/default/files/
La configuration PHPweb/sites/default/settings.php
  1. Explorez la structure de votre projet :

    Fenêtre de terminal
    # Lister les dossiers principaux
    ls -la
    ls -la web/
    ls -la web/modules/
  2. Créez les dossiers pour vos futurs modules et thèmes :

    Fenêtre de terminal
    mkdir -p web/modules/custom
    mkdir -p web/themes/custom
  3. Vérifiez que le dossier de configuration existe :

    Fenêtre de terminal
    ls -la config/sync/

Passez à la Configuration Sync pour maîtriser l’import/export de configuration.