Skip to content

Structure des fichiers

This content is not available in your language yet.

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

  • Directorytailstore/ (Racine du projet)
    • composer.json
    • composer.lock
    • Directoryconfig/ (Configuration exportée)
      • Directorysync/
    • Directoryvendor/ (Dépendances - NE PAS MODIFIER)
    • Directoryweb/ (Racine web / Docroot)
      • Directorycore/ (Cœur Drupal - NE PAS MODIFIER)
      • Directorymodules/
        • Directorycontrib/ (Modules téléchargés)
        • Directorycustom/ (Vos modules)
      • Directorythemes/
        • Directorycontrib/ (Thèmes téléchargés)
        • Directorycustom/ (Vos thèmes)
      • Directorysites/
        • Directorydefault/
          • Directoryfiles/ (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.