Boite à outils du développement Drupal

Sommaire



Installation et Configuration d'une instance Drupal

  • Installer Drupal :

    composer create-project drupal/recommended-project drupal-website
    cd drupal-website```
  • Installer Drupal dans un Sous-répertoire :

    composer create-project drupal/recommended-project drupal-website
    mv drupal-website public_html``` 
  • Initialisation du Site :

     drush site:install standard --db-url=mysql://utilisateur:password@localhost/databasename --site-name="Drupal Website"


Commandes Drush

  • Commandes Drush Courantes :

    drush cr          # Vider le cache
    drush uli         # Obtenir l'URL de connexion
    drush status      # Statut du site Drupal
    drush pm:enable   # Activer un module
    drush pm:uninstall # Désinstaller un module
    drush config:export -y # Exporter la configuration
    drush config:import -y # Importer la configuration` 


    Modules et Thèmes

  • Installer un Module via Composer :

    composer require drupal/devel drush pm:enable devel

  • Installer un Module Personnalisé :

    • Placez le module dans modules/custom/nom_du_module.
    • Définissez le fichier .info.yml, les implémentations de hook, et autres composants.
  • Installer un Thème Personnalisé :

    • Placez le thème dans themes/custom/nom_du_theme.
    • Définissez le fichier .info.yml, les templates, et les ressources.


Gestion de la Configuration

  • Exporter la Configuration :

    drush config:export

  • Importer la Configuration :

    drush config:import

  • Réinitialiser la Configuration par Défaut :

    drush config:delete monmodule.settings

  • Executer un code php via Drush :

    drush php-eval "dump(\Drupal::Config('system.site')->get('name'));"



Entités et Opérations de Base de Données

  • Requête avec EntityQuery :

    $query = \Drupal::entityQuery('node')
        ->condition('type', 'article')
        ->accessCheck(TRUE)
        ->condition('status', 1);
    $nids = $query->execute();
  • Charger une Entité :

    $node = \Drupal::entityTypeManager()
        ->getStorage('node')
        ->load($node_id);
  • Charger plusieurs Entités :

    $entity_manager = \Drupal::entityTypeManager()
        ->getStorage('node');
        
    $nids = $entity_manager->getQuery()
    ->condition('type', 'article')
    ->condition('status', 1)
    ->accessCheck(TRUE)
    ->execute();
    
    $nodes = $entity_manager
        ->loadMultiple($nids);
        
  • Créer une Entité :

    $node = \Drupal\node\Entity\Node::create([
      'type' => 'article',
      'title' => 'Mon Nouvel Article',
    ]);
    $node->save();


Hooks et Services

  • Implémenter un Hook :

    function monmodule_node_view(array &$build, \Drupal\node\NodeInterface $node) {
      // Modifier l'affichage du node ici.
    }
  • Définir un Service :

    • Ajouter à monmodule.services.yml :

      services:
        monmodule.mon_service:
          class: Drupal\monmodule\MonService
          arguments: []
    • Créer src/MonService.php avec la classe définie.


Routes et Contrôleurs

  • Définir une Route :

    • Dans monmodule.routing.yml :

      monmodule.custom_route:
        path: '/custom-route'
        defaults:
          _controller: '\Drupal\monmodule\Controller\CustomController::content'
        requirements:
          _permission: 'access content'
  • Créer un Contrôleur :

    • Dans src/Controller/CustomController.php :

      namespace Drupal\monmodule\Controller;
      use Drupal\Core\Controller\ControllerBase;
      
      class CustomController extends ControllerBase {
        public function content() {
          return [
            '#markup' => 'Bonjour, Drupal!',
          ];
        }
      }


Utilisateurs et Contrôle d'accés

  • Vérification des permissions de l'Utilisateur :

    $current_user = \Drupal::currentUser();
    if ($current_user->hasPermission('administer site configuration')) {
      // L'utilisateur a la permission d'administrer le site.
    }
  • Créer un Utilisateur :

    // Création d'un nouvel utilisateur
    $user = \Drupal\user\Entity\User::create([
      'name' => 'nom_utilisateur',
      'mail' => 'utilisateur@exemple.com',
    ]);
    $user->save();


Bonus : Conseils et bonnes pratiques


  • Outils de Debug :

    • Utilisez le module Devel pour un débogage rapide.
    • Utilisez la fonction dump($foo) pour le débogage du code et pensez à ajouter die() après le dump pour que php arrête la compliation du code.
    • Utilisez drush ws pour surveiller les journaux et les erreurs.
  • Pour des meilleures Performances :

    • Activez la mise en cache partout où c'est possible.
    • Utilisez Varnish ou Redis pour des niveaux de cache supplémentaires.
    • Optimisez les requêtes de base de données et utilisez le service Drupal\Core\Database\Connection au lieu d'écrire des requêtes en SQL.
  • Bonnes Pratiques de Sécurité :

    • Gardez Drupal et tous les modules/thèmes à jour.
    • Utilisez des mots de passe sécurisés et limitez les permissions.
    • Activez l'authentification à deux facteurs (2FA) si possible.