theme drupal
Inclure dans drupal.fr

Maintenant que l'on a vu comment installer Drupal 8, nous vous présentons notre tutoriel qui aborde les bases du développement d’un thème sur Drupal 8 “from scratch”. Adressé à des débutants dans ce domaine, ce tutoriel n’a pas pour objectif d’expliquer dans les moindres détails la création d’un thème sur Drupal. Il regroupe les bonnes pratiques pour commencer sans difficulté le développement d’un thème sur Drupal 8. Néanmoins, si vous souhaitez avoir des informations complémentaires, n'hésitez pas à faire appel à notre agence Drupal. Un de nos experts saura vous accompagner au mieux, dans le développement de votre site Drupal. 

Prérequis

Pour suivre ce tutoriel, certaines conditions sont nécessaires :

  • Des connaissances de base du “back-office” de Drupal 8.
  • Avoir une installation Drupal 8 fonctionnelle et bien configurée. (installer Drupal 8).
  • Des connaissances de base en html, css et php.

Désactivation des caches pendant la phase de développement thème sur Drupal

Les caches ont pour but d’améliorer les performances d’un site, ils gardent en mémoire certaines informations pour qu’elles n’alourdissent pas le chargement des pages.
Drupal 8 a adopté ce mode de fonctionnement, cependant ce système est très handicapant pendant la phase de développement. Nous allons donc apprendre à le désactiver puis à le réactiver au besoin.

Dans le back-office

Aller dans configuration.

thème sur Drupal

Puis performance.

performance

Dans cet onglet, décochez les deux cases en bas de page et enregistrez la configuration.

decocher

Création du fichier settings.local.php

Rendez-vous dans le répertoire “sites” et copiez le fichier “example.settings.local.php”, renommez cette copie en “settings.local.php” puis placez-le dans le dossier “default”.

Modification du fichier settings.php dans “sites/default”

Décommentez les lignes 769, 770 et 771.

Pour décommenter des lignes, il faut simplement enlever le dièse devant la ligne.

#  if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
#  include $app_root . '/' . $site_path . '/settings.local.php';
#  }

Comme ceci :

  if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
  include $app_root . '/' . $site_path . '/settings.local.php';
  }

Modification du fichier settings.local.php dans “sites/default”

Il faut ensuite vous assurer que la ligne ci-dessous :

$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/development.services.yml'; 

est présente dans le fichier "settings.local.php" à la ligne 41.

Puis passez les lignes 54 et 55 de TRUE à FALSE :

$config['system.performance']['css']['preprocess'] = FALSE;
$config['system.performance']['js']['preprocess'] = FALSE;

Ensuite décommentez les lignes 69 et 100.

Enfin si vous avez installé une version postérieure à Drupal 8.4 alors ajoutez cette ligne à la fin du fichier :

$settings['cache']['bins']['page'] = 'cache.backend.null';

Modification du fichier development.services.yml dans “sites”

Dans le fichier "development.services.yml", ajoutez les lignes suivantes :

# Local development services.
#
# To activate this feature, follow the instructions at the top of the
# 'example.settings.local.php' file, which sits next to this file.
parameters:
  http.response.debug_cacheability_headers: true
  twig.config:
    debug: true
    auto_reload: true
    cache: false

services:
  cache.backend.null:
    class: Drupal\Core\Cache\NullBackendFactory

Reconstruire les caches

Pour que les modifications fonctionnent vous devez reconstruire les caches. Pour cela, dans votre navigateur, entrez l’adresse de votre site suivi de “/core/rebuilt.php”. Dans notre exemple “localhost/nouveautheme/core/rebuilt.php”.
Une fois toutes ces modifications apportées les caches devraient être enfin désactivés.

Rétablir les caches

Une fois que vous avez conclu la phase de développement, avant de mettre le site en production, nous voulons rétablir le système de cache.
Pour cela, ouvrez le fichier "settings.php" dans le dossier “sites/default” et commentez les lignes suivantes comme ceci :

#  if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
#  include $app_root . '/' . $site_path . '/settings.local.php';
#  }

Puis cochez les deux cases dans performance.

cocher

Et enfin effacez tous les caches pour remettre tout à zéro, en allant dans configuration.

configuration

Puis cliquez sur performance.

performance

Et videz les caches.

vider_cache

Ainsi le système de cache est réactivé.

Développement du thème sur Drupal

Création dossier du thème et fichier .info.yml

Premièrement vous devez vous rendre à la racine de votre site Drupal. Dans ce répertoire il y a un dossier “thème”. Dans celui-ci créez un dossier “custom”, ce dossier contiendra tous les thèmes que vous créerez. Dans “custom” vous allez créer un dossier, le nom de ce dossier doit être le nom de votre futur thème. Pour l’exemple nous l’appelerons “nouveautheme”. À l'intérieur, créez le fichier “nouveautheme.info.yml”.

Saisie des éléments descriptifs dans .info.yml

Dans le fichier “nouveautheme.info.yml” vous devez placer les éléments définissants votre thème sur Drupal. Il y a beaucoup d’éléments pour définir un thème, certains obligatoires d’autres optionnels, nous allons renseigner les éléments les plus intéressants :

name: nouveautheme
description: Theme test pour apprendre
core: 8.x
type: theme

Chaque élément est assez explicite et va servir à Drupal pour qu’il reconnaisse notre dossier comme un thème à part entière.
Aller dans le back office de Drupal, dans la catégorie apparence.

apparence

Vous verrez en bas de cette page une section “Thème désinstallé”. Dans cette liste il devrait y avoir votre thème, il suffit de cliquer sur “installer et définir par défaut”. C’est maintenant votre propre thème sur Drupal qui est installé.

instal_theme

Ajout des régions dans .info.yml

Avant de modifier quoi que ce soit, rendez-vous dans la catégorie structure.

structure

Dans mise en pages des blocs.

mise_en_page

Vous pouvez remarquer qu’il y a un grand nombre de régions par défaut (barre latérale gauche, barre latérale droite, contenu, entête, primary menu, etc.).
Pour y voir plus clair, nous allons surcharger un fichier présent dans le core de Drupal en ajoutant nos propres régions dans notre nouveautheme.info.yml. Retournez dans le fichier .info.yml, nous allons déclarer les différentes régions composant nos pages web :

regions:
      header: header
      content: content
      footer: footer

Maintenant retournez dans la catégorie Structure puis dans mise en page des blocs, vous constaterez que les seules catégories qui apparaissent à présent sont celles que nous venons d’ajouter.

Pour mieux comprendre ce que sont les régions je vous propose de regarder le schéma illustratif ci-dessous :

region 1

Comme vous pouvez le voir, les régions sont des zones qui contiennent des blocs.

Création du fichier .libraries.yml

Maintenant nous allons ajouter un dossier “css” et un fichier “css/style.css”, “css/layout.css” puis “css/colors.css”. Nous allons les déclarer dans un fichier nouveautheme.libraries.yml à la racine du thème et enseigner tous les chemins menant aux fichiers de style.
Dans ce fichier nous allons intégrer sous forme d’une librairie les fichiers css. Écrivons :

global-styling:
  version: 1.x
  css:
    theme:
      css/layout.css: {}
      css/style.css: {}
      css/colors.css: {}

Vous pouvez maintenant modifier les fichiers avec l'extension .css pour apporter des modifications à l’aspect de votre site.

Création du dossier templates et de son contenu

Il est maintenant temps de créer le dossier “templates”. Les fichiers dans ce dossier auront l’extension .html.twig et nous y intégrerons toute la partie html du site. Ce type d’extension signifie que nous allons nous servir de moteur de template Twig. Vous pouvez retrouver une documentation en anglais en suivant ce lien : twig.symfony.com/doc
Il faut savoir que des fichiers du même genre sont déjà présents dans le core de Drupal (core/modules), ceux que nous allons rajouter vont surcharger les fichiers du même nom. Garder la même nomenclature est donc primordial.

Voici la liste des principaux types de fichiers composant le dossier “templates”.

html.html.twig, page.html.twig, region.html.twig, block.html.twig, nodes.html.twig

Chacun de ces fichiers peut être surchargé pour modifier son contenu. Cependant il est aussi possible de modifier spécifiquement un contenu en suivant des règles de nomenclature.

Le fichier html.html.twig

Ce fichier contiendra tout ce qui se trouve généralement entre les balises <html> et <body>.

Le fichier page.html.twig

Le fichier page.html.twig, donne une structure commune à toutes les pages qui s’afficheront sur notre site. On peut cependant créer une exception en créant un fichier avec un nom modifié. Pour, par exemple, créer un affichage pour le node n°1 il faut le nommer “page--node--1.html.twig”. Ainsi le contenu de ce fichier s’affichera seulement lorsque “/node/1” est affiché.

node

Le fichier region.html.twig

Ce fichier donne une structure commune à toutes les régions. Comme expliqué plus haut dans cet article, les régions sont ajoutées dans le fichier .info.yml et leur contenu est modifiable à partir du back-office dans l’onglet structure puis mise en page des blocs. Pour impacter la structure d’une seule région nous pouvons créer le fichier “region--footer.html.twig” par exemple. Comme son nom l’indique ce fichier impactera seulement la région appelée “footer”.

region 2

Le fichier block.html.twig

Les blocs sont des éléments soit déjà présent par défaut dans Drupal, soit que vous pouvez créer vous même. Le fichier block.html.twig va permettre de gérer l’affichage de tous les blocs. Si vous voulez modifier un bloc déjà existant, vous devez trouver son nom en allant dans mise en page puis configurer. Vous pouvez vous servir de son nom en l’ajoutant dans le nom d’un fichier à la suite du nom de votre thème, comme par exemple : “block--nouveautheme-content.html.twig ”. Il est aussi possible de cibler un bloc par son id, “block--block--1.html.twig” si l’id est égal à 1.

region 1

Le fichier node.html.twig

Ce fichier donne le rendu de chaque node. Cependant le fichier nommé “node--1.html.twig” modifiera le rendu du node ayant l’id 1.

node

Ces modifications spécifiques sont possibles sur tous les types de fichiers présentés plus haut. Cet article présente plus précisément les règles de nomenclature pour les modifications spécifiques.

Création du fichier .theme

Dans un thème nous pouvons ajouter un fichier portant le nom du thème sur Drupal suivi de l’extension .theme, selon notre exemple “nouveautheme.theme”. Ce fichier va contenir des fonctions qui vont servir dans les opérations de “preprocessing”. Le preprocessing est une notion avancée et permet d’optimiser le chargement d’une page. Cependant dans ce tutoriel nous n’aborderons pas cette notion.

Vous avez maintenant les bases pour commencer votre thème sur Drupal. Si vous avez besoin de précision ou des questions, n’hésitez pas à nous contacter via le formulaire en cliquant ici.

Commentaire

Profile picture for user Akbar
Akbar
mar 19/11/2019 - 14:02
Bonjour, après avoir suivi les étapes du tuto pour developper un theme j'ai enfin dans mon back end le theme qui apparait mais ensuite pour pouvoir le modifier à ma guise je suis perdu. Avez vous un autre tuto à ce sujet ? merci bcp !
Profile picture for user Akbar
Anonyme

En réponse à par Akbar

mar 03/12/2019 - 15:15
Maintenant que tu peux sélectionner ton thème dans le Back Office tu vas pouvoir le modifier.
Les fichiers que tu dois modifier pour changer l'affichage de ton thème sont les fichiers twig.
Voici un tuto sur les twig dans Drupal 8 : https://happyculture.coop/blog/drupal-8-twig-et-les-themes

Ensuite tu peux voir sur beaucoup de site les mêmes fonctionnalités qui reviennent tout le temps comme les cartes google maps qui sont inclus dans les sites. Toutes ces fonctionnalités sur possible sur les sites Drupal à l'aide des Modules.
Tu peux retrouver la liste des modules existants et les ajouter à ton site ici : https://www.drupal.org/project/project_module.

Si une fonctionnalité que tu souhaite n'existe pas alors tu dois créer ton propre module pour répondre à tes besoins.
Voici un bon tuto pour t'expliquer les module : https://www.encod.fr/creation-de-module-drupal-8

Hésite pas à poster tes questions ici.

Ajouter un commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.