dimanche 24 février 2013
Dans Drupal, un module est composé de code qui permet d'enrichir le noyau en ajoutant ou en réécrivant des fonctionnalités. En général, face à un nouveau besoin, on privilégiera dans l'ordre :
- La recherche d'une contribution existante parmi plus de 20 000 modules
- L'altération d'un module existant par extension
- L'écriture d'un tout nouveau module
Où sont les modules ?
- Ceux du noyau se trouvent dans /modules/
- Les modules installés provenant des contributions se trouvent dans /sites/all/modules/
Essentiellement, de deux fichiers partageant le même nom et portant les extensions .info et .module. C'est le strict minimum pour avoir quelque chose de fonctionnel mais on trouve généralement plusieurs autres fichiers à l'intérieur du répertoire.
Fichier .info
Il s'agit d'un fichier texte qui décrit le module sous la forme clé-valeur. Son contenu est lu et interprété dans le but faire des vérifications au moment de l'installation :
name = Exemple 1 description = "Description du module" package = Code 18 core = 7.x files[] = code18.module dependencies[] = block ...Où :
- name contient le nom textuel du module qui apparaîtra dans la liste des modules et lorsqu'il est référencé.
- description décrit simplement ce que fait le module.
- package représente le regroupement logique dans lequel le module doit être classé (voir à droite).
- core indique la compatibilité avec le noyau de Drupal (ici les versions de Drupal 7).
- files[] permet d'inclure un fichier externe nécessaire au module.
- dependencies[] indique que le module courant possède une dépendance à un autre module qui doit aussi être installé pour qu'il fonctionne. Le nom du module dépendant à inscrire est simplement le nom de son fichier .module ou .info, sans l'extension.
- Et plusieurs autres caractéristiques avancées (page de configuration, attachement de fichiers JavaScript et CSS).
Aperçu des métadonnées provenant du fichier .info dans la liste des modules |
Avant d'écrire quoi que ce soit dans un fichier .module, il est impératif de bien comprendre le concept du hook. Les hooks permettent d'intervenir à différentes étapes dans l'exécution du code de sorte à pouvoir altérer et enrichir une fonctionnalité existante de façon à répondre à nos besoins sans avoir à réécrire le code original (ne modifiez jamais directement un module provenant d'une contribution!). Au contraire, on redéfinit uniquement ce qu'on a besoin en utilisant les hooks mis à notre disposition.
Dans la documentation, la liste des hooks disponibles indique une notation générique du type hook_init() où le préfixe hook doit être remplacé par le nom de notre module. Par exemple, si on crée un module qu'on nomme code18, on écrira des fonctions à l'intérieur de notre fichier code18.module :
- code18_init()
- code18_permission()
- code18_menu()
- code18_help()
- code18_form_alter()
Fichier README.txt
Contient l'information nécessaire pour comprendre le fonctionnement et les impacts du module.
Fichier .install
Optionnellement, un module pourrait inclure un fichier .install qui contiendrait des fonctions PHP implémentant les hooks _install() et _uninstall() qui, respectivement, ajouterait des champs nécessaires au fonctionnement du module et ferait le ménage pour garder le système propre lors de sa désinstallation.
Il y a plus encore mais pour l'instant, retenez uniquement ceci, le but de ce billet étant d'offrir un aperçu de la base pour avoir un minimum de compréhension face à une première expérience. Dans le prochain billet, je ferai une démonstration plus concrète pour mettre le tout en pratique.