Créer un module avec Drupal 8
Dans cet article, nous allons en découvrir un peu plus sur Drupal 8 et son système modulaire. Nous allons notamment comprendre ce qu’apportent réellement les modules et les blocs et comment créer son premier module personnalisé avec Drupal 8.
Ce tutoriel est accessible à une grande majorité d'utilisateurs. Toutefois, si vous avez la moindre question au cours de votre lecture, n'hésitez pas à prendre contact avec un membre de notre équipe. Notre agence web Drupal saura vous conseiller au mieux dans la création de vos modules.
Nous allons donc commencer ce tutoriel par une petite piqûre de rappel sur le vocabulaire de base de Drupal afin de faciliter la compréhension de l’article.
- Qu’est ce qu’un module ? : C’est un ensemble de fichiers PHP, Javascript et/ou CSS qui étendent les fonctionnalités du site et en ajoutent de nouvelles.
- Qu’est ce qu’un bloc ? : Les blocs sont des parties de la mise en page de votre site web indépendantes les unes des autres et peuvent être créées, supprimées et ordonnées à volonté par l’utilisateur via la page d’administration. Pour commencer la création d’un module personnalisé nous devons d’abord réaliser une première étape : La création d’un plugin de blocs (utilisant les annotations).
- Qu’est ce qu’un plugin ? : Les plugins sont les différentes fonctionnalités d’un module pouvant être interchangeables. Ici nous allons utiliser des annotations pour créer un plugin.
- Pourquoi les annotations ? : Les annotations sont utilisées dans les classes où les fonctionnalités des blocs sont écrites. Les annotations commençant par “@Block” sont appelées “bloc plugin”. Ce @Block contient le metadata de la description du plugin.
Voici un exemple d’annotation :
* @Block(
* id = "article_block",
* admin_label = @Translation("Article block"),
* category = @Translation("Custom article block example")
* )
id : nom de machine_id
admin_label : Nom des blocs
category : description du plugin
Remarque : Pour la création de modules, nos fichiers et dossiers doivent être à la racine (modules/custom).
Etape 1 : Création du fichier d’information et installation du module
Cette première étape est courte mais très importante, ici nous allons créer les fichiers de description du module.
Commençons par la création d’un dossier “first_block “ dans “modules/custom”. Puis dans le dossier “first_block” nous devons créer le fichier “first_block.info.yml” qui va contenir la description de notre module.
Remarque : les noms des fichiers doivent avoir le bon format, tel que “first_block.info.yml”.
name: Premier bloc
description: Création d'un module simple
core: 8.x
core_version_requirement: ^8 || ^9
package: Custom
type: module
name : Nom de module
description: Description du module
package : Nom de package
type : Type de package
Installation/desinstallation du module
Pour installer/desinstaller vos modules il existe deux manières différentes :
- Depuis le terminal avec drupal console :
Installation : drupal module:install first_block
Désinstallation : drupal module:uninstall first_block;
- Gestion manuelle depuis le backoffice du site :
Installation : Gérer -> Extension -> chercher votre module -> Installer
Désinstallation : Gérer -> Extension -> Désinstaller -> Chercher votre module -> Désinstaller
Remarque : toutes commandes Drupal peuvent être écrites en abrégé, exemple avec module:install = moi ou module:uninstall = mou.
Etape 2 : Ajout de la fonctionnalité date et heure
Dans cette partie nous allons voir comment rendre notre module fonctionnel afin qu’il affiche la date et l’heure du jour. Premièrement, il faut créer le fichier “FirstBlock.php” dans first_block/src/Plugin/Block. puis créer la classe FirstBlock dans FirstBlock.php, cette classe élargie l’abstract générique de la classe “BlockBase”. BlockBase est une class qui fournit le formulaire de configuration, le paramétrage de blocs, et égalament la gestion des paramètres de visibilité des blocs définis par l'utilisateur. Ensuite passons à la création de la fonction “build” de la class “FirstBlock”.
Cette fonction retourne l’array suivant :
public function build() {
return array(
'#markup' => strftime('%Y-%m-%d %H:%M')
);
}
Ce qui correspond à l’affichage de la date dans un format personnalisé.
Voici le code final pour la class FirstBlock.php
<?php
namespace Drupal\first_block\Plugin\Block;
use Drupal\Core\Block\BlockBase;
/**
* Provides a 'firstBlock' block.
*
* @Block(
* id = "first_block",
* admin_label = @Translation("Premier bloc"),
* )
*/
class FirstBlock extends BlockBase{
public function build() {
return array(
'#markup' => strftime('%Y-%m-%d %H:%M')
);
}
}
?>
Etape 3 : Affichage du bloc
Dans cette troisième partie nous allons afficher notre module sur la page web.
Tout d’abord il faut nettoyer le cache avec la commande “drupal cr” et réouvrir votre projet dans votre navigateur.
Maintenant vous pouvez installer votre plugin dans Structure -> Mise en page des blocs-> sélectionnez votre bloc région et cherchez “Premier bloc” (le nom de votre plugin) et ajouter le plugin dans la région.
Après avoir cliqué sur “retour au site” vous pouvez voir le nouveau bloc avec comme contenu la date et l’heure du jour dans la région que vous avez sélectionné.
Félicitations vous avez créé votre premier module sous Drupal 8, nous arrivons à la fin de cet article ayant pour but de vous faire découvrir un peu plus en précision l’univers de Drupal et de ses fonctionnalités extrêmement variés. Il est important de comprendre que Drupal est un système de gestion paramétrable vous permettant une création réellement libre de votre site internet. Nous espérons que cela vous a aidé sur le développement de votre site internet Drupal 8 et qu’il a répondu à toutes vos interrogations.
Si vous cherchez d’autres explications sur le monde de Drupal, nous vous invitons à consulter nos différents billets de blog.
N’hésitez pas à nous faire part de vos retours ou vos questions via notre formulaire de contact.
Commentaire
Est-ce que c'est pareil sur Drupal 9 ?
Pourriez-vous me dire comment me connecter à une API, avec token svp ?
Merci
En réponse à (sans sujet) par Nadia
Oui, la création d’un module est similaire sur Drupal 8 et Drupal 9. Attention tout de même car des Class et des fonctions changent d’une version à une autre (ex : \Drupal::entityManager() devient \Drupal::entityTypeManager()).
Cordialement,
Ajouter un commentaire