02 mar 2015
Catégorie

On peut voir plusieurs articles sur le web détaillant la création d'un module pour Drupal 8.
Malheureusement, Drupal 8 ayant beaucoup évolué depuis la première version Alpha, nombre de ces tutorials Dupal 8 sont dépassés.

Voici donc un exemple expliquant l'élaboration de module avec un code qui devrait maintenant rester inchangé.
Cet article est écrit sur la base de Drupal 8 beta 7.

Avant de commencer, je voudrais quand même rappeler que Drupal 8 est basé sur le framework Symfony et qu'une connaissance de Symfony me semble absolument indispensable pour qui aimerait se lancer dans l'aventure du développement pour Drupal 8. Au minimum, pour ce tutorial, les notions de programmation objet et pattern MVC doivent être maîtrisées.

- Pour créer un module avec Drupal 7, il nous fallait deux fichiers : un fichier .info et un fichier .module.
Le fichier .module est maintenant facultatif pour Drupal 8 !

- Autre changement, les modules "maison" vont maintenant dans le dossier /modules à la racine de Drupal.
Les modules du coeur de Drupal sont eux dans le dossier /core/modules.

 

Allons-y!

Commençons donc par créer un dossier "/modules/demo".

 

- 1) Le fichier info

Dans ce dossier, ajoutons notre "point info" : demo.info.yml

name: Drupal 8 Demo module
description: 'Module de demo pour Drupal 8'
package: 'Virtualandscape'
type: module
core: 8.x

 

Cela suffit pour pouvoir activer le module, nous pouvons donc nous rendre dans l'administration de notre site Drupal 8, cliquer sur le menu "Etendre" et activer le module "Demo" dans le package "Virtualandscape".

Au passage, vous remarquerez qu'une fois activé, il est impossible de désactiver ce module, on ne peut pas "dé-cocher" la case. Cela est vrai pour tous les modules, cette case à cocher ne sert plus à rien dans Drupal 8.
Désactiver un module c'est le désinstaller.

Notre module Demo est activé, mais il ne sert à rien, nous allons donc ajouter un contrôleur, afin de lui faire afficher un simple texte:

 

- 2) Le contrôleur

Créons un dossier "src/Controller" dans le dossier "demo", puis ajoutons un fichier "DemoController.php" avec ce code :

// le namespace qui aidera au chargement automatique des fichiers.
namespace Drupal\demo\Controller; 
use Drupal\Core\Controller\ControllerBase;
// on declare notre contrôleur
class DemoController extends ControllerBase { 
    
    public function demo() {
        return array(
            // On lui fait afficher le texte.
            '#markup' => t('Je suis le texte du Contr?leur') 
        );
    }
}

 

Notre module est créé, il nous reste à afficher le texte du contrôleur sur une page.

 

- 3) Le fichier routing

Fini le "hook_menu()" de Drupal 7, le routing est maintenant géré par un composant de Symfony.

Créons un fichier demo.routing.yml à mettre au même niveau que le demo.info.yml :

demo.mapage:
    path: '/mapage'
    defaults:
        _controller: '\Drupal\demo\Controller\DemoController::demo'
        _title: 'Page de Demo'
    requirements:
        _permission: 'access content'

 

Voila, il suffit maintenant de vous rendre sur l'url "/mapage" et vous devriez voir le texte du contrôleur s'afficher.

Félicitations, vous avez créé votre premier module Drupal 8.

Dans le prochain tutorial Drupal 8,nous ajouterons un menu.