Drupal 8 instaure des changements importants au niveau de son API et donc de sa manière de créer des nouveaux modules. La programmation procédurale est abandonnée au profit d’une programmation orientée objet (OOP) qui est devenu un standart dans beaucoup de framework notamment Symfony2 dont certains bundle sont intégrés à Drupal 8.
Nous allons donc voir les différentes étapes pour créer un module “d8_example_module” qui affichera une page.
1 - Définir son module
Le fichier .info de Drupal 7 est remplacé par un fichier YAML. Celui-ci se nommera de la sorte :
/modules/d8_example_module/d8_example_module.info.yml
name: D8 Test Module
description: D8 Test Module
type: module
core: 8.x
package: Custom
Ce fichier YAML est suffisant pour activer le module via l’interface Drupal.
2- Création du controller
Le controller nous permet de faire le lien entre l’action demandée (=route) et retourne le résultat. En programmation orientée objet, on étend donc le controller de base :
/modules/d8_example_module/src/Controller/D8ExampleModuleController.php
namespace Drupal\d8_example_module\Controller;
use Drupal\Core\Controller\ControllerBase;
class D8ExampleModuleController extends ControllerBase {
public function test_page($from, $to) {
return [
'#theme' => 'd8_example_module_page_theme',
'#from' => $from,
'#to' => $to,
];
}
}
3 - Création de la route
Les hook_menu de Drupal 7 sont remplacés par le système de route de Symfony2. Les routes sont donc placées dans un fichier YAML comme cela :
/modules/d8_example_module/d8_example_module.routing.yml
d8_example_module.test_page:
path: '/test-page/{from}/{to}'
defaults:
_controller: 'Drupal\d8_example_module\Controller\D8ExampleModuleController::test_page'
_title: 'Test Page!'
requirements:
_permission: 'access content'
4 - Création du thème avec Twig
Sur Drupal, le système de hook_theme est gardé avec un changement majeur qui est l’arrivée du moteur de template Twig. Le hook se présente ainsi comme cela :
/modules/d8_example_module/d8_example_module.module
/**
* Implements hook_theme().
*/
function d8_example_module_theme() {
$theme['d8_example_module_page_theme'] = [
'variables' => ['from' => NULL, 'to' => NULL],
'template' => 'd8-theme-page',
];
return $theme;
}
Le fichier de thème associé :
/modules/d8_example_module/templates/d8-theme-page.html.twig
<section>
{% trans %}
<strong>{{ from }}</strong> to <em>{{ to }}</em>
{% endtrans %}
</section>
5- Le résultat
Notre page s'affiche à l'appel de cet URL :
http://localhost/test-page/foo/bar