Anthony HERVÉ

Ingénieur édudes et développement

Drupal 8 - Utiliser un template particulier

12/12/2016
Image actualité

Lorsque que vous générez un controller via la commande drupal generate:controller ou créez un controller manuellement, vous devez normalement avoir un code qui ressemble à ceci :

<?php

namespace Drupal\monmodule\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
 * Class MyController.
 *
 * @package Drupal\monmodule\Controller
 */
class MyController extends ControllerBase {
  /**
   * Hello.
   *
   * @return string
   *   Return Hello string.
   */
  public function hello($name) {
    return [
      '#type'   => 'markup',
      '#markup' => $this->t('Implement method: hello with parameter(s): $name'),
    ];
  }

}

Par défaut, le controller retourne une variable markup qui sera affichée dans les templates de base. Mais comment faire si vous souhaitez, comme dans un controller Symfony, lui indiquer le template à utiliser ?

La marche à suivre est assez simple et se fait en 3 étapes :

  • Créer un fichier de template Twig dans le répertoire monmodule/templates (ou un sous-répertoire) : mytemplate.html.twig par exemple
Bonjour {{ name }} !!!
  • Créer le fichier monmodule.module à la racine de votre module et compléter-le avec le code suivant :
<?php

function monmodule_theme() {
  $theme['mytheme'] = [
    'variables' => [
      'name' => NULL
    ],
    'template'  => 'mytemplate' // Chemin du template à partir du dossier templates
  ];

  return $theme;
}

Cette fonction vous permet d'ajouter des thèmes à votre module, que vous pourrez ensuite utiliser dans vos controllers ou blocs.

  • Indiquer dans votre controller le thème à utiliser et les variables.
public function hello($name) {
    return [
      '#theme'   => 'mytheme',
      '#name' => $name,
    ];
  }

 

Vous voilà fin prêt à faire de jolis templates.

Commentaires