Travail avec la base de données dans Drupal 7 - leçon 8 - Requêtes d’insertion (INSERT INTO)
Les requêtes d'insertion doivent toujours utiliser le constructeur de requêtes. Certaines bases de données nécessitent des gestionnaires spécifiques pour les champs LOB (Large OBject, comme le texte dans MySQL) et BLOB (Binary Large OBject), d'où l'importance du niveau d'abstraction pour que les pilotes DB implémentent ces gestionnaires.
Les requêtes d'insertion commencent par l'utilisation de la fonction db_insert() :
Travail avec la base de données dans Drupal 7 - leçon 9 - Requêtes de mise à jour (UPDATE)
Les requêtes de mise à jour doivent toujours utiliser le constructeur de requêtes. Les différentes bases de données ont des gestionnaires spécifiques pour les LOB (Large OBject, tels que TEXT dans MySQL) et les champs BLOB (Binary Large OBject), donc un niveau d’abstraction est nécessaire pour que les pilotes individuels implémentent leurs gestionnaires spécifiques.
Les requêtes de mise à jour commencent toujours par la fonction db_update() :
Travail avec la base de données dans Drupal 7 - leçon 10 - Requêtes de suppression (DELETE)
Les requêtes de suppression doivent utiliser le constructeur de requêtes. Elles commencent par la fonction db_delete() :
Travail avec la base de données dans Drupal 7 - leçon 11 - Requêtes de fusion (MERGE)
Les requêtes de fusion sont un type spécial hybride de requêtes. Bien que la syntaxe pour ces requêtes ait été définie dans SQL 2003, en réalité aucune base de données ne supporte cette syntaxe. Cependant, la plupart des bases de données fournissent une implémentation alternative en utilisant une syntaxe spécifique. Le constructeur de requêtes de fusion dans Drupal abstrait le concept de fusion de requête dans une structure objet, de sorte que cet objet peut être compilé différemment pour chaque base de données en tenant compte de ses spécificités.
Travail avec la base de données dans Drupal 7 - leçon 12 - Conditions des requêtes (WHERE, HAVING, LIKE)
La condition d’une requête permet de sélectionner uniquement les enregistrements répondant à certaines contraintes, par exemple les nœuds créés depuis moins de deux semaines, les termes contenant le mot "drupal", etc. En SQL, on utilise WHERE et HAVING pour définir des restrictions sur les requêtes SELECT, UPDATE, DELETE. Dans les requêtes dynamiques, un mécanisme similaire existe pour gérer ces conditions, fonctionnant de la même manière pour les trois types de requêtes : sélection, mise à jour, suppression.
Créer un module Drupal, démarrage rapide
Commençons par api.drupal.org, ouvrez la page du hook hook_node_presave(), qui s’exécute avant l’ajout d’un nœud.
http://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_validate/7
Les hooks nous permettent d’intégrer notre code dans le flux normal de Drupal, pour ajouter des validations, des champs, des éléments de formulaire, etc.
Ajoutons notre module dans le dossier sites/all/modules :
De quoi est composé un module Drupal 7 ?
Avant de commencer à créer notre module, je vais vous parler un peu des possibilités de l’API Drupal. L’API offre de larges fonctionnalités pour travailler avec la taxonomie, les nœuds, les utilisateurs, ainsi que pour l’entrée et la sortie depuis la base de données. Pour l’interaction entre les modules et le noyau de Drupal, ainsi qu’entre les modules eux-mêmes, Drupal dispose d’un système de hooks. Un hook est un callback, c’est-à-dire qu’au moment où l’exécution du code atteint un hook, le code de notre fonction ajoutée dans notre module est exécuté.
Drupal 7 hook_block_info() et hook_block_view() : afficher des informations dans un bloc
Dans la leçon précédente, nous avons créé un module pour Drupal 7, dans cette leçon nous allons continuer à étendre les fonctionnalités de notre module. Nous ajouterons l'affichage d'un bloc via le hook hook_block_view(), ainsi que hook_block_info(). Ce bloc contiendra des informations sur les derniers utilisateurs du site avec un lien vers leur page.
Je commence par décrire le hook_block_info() :
Il définit tous les blocs créés par le module.
Hook_menu Drupal 7 : création de pages via un module
Dans la leçon précédente, nous avons vu comment afficher des informations depuis la base de données en utilisant l'API Drupal, notamment avec les hooks hook_block_info() et hook_block_view(). Dans cette leçon, nous allons afficher des pages, plus précisément utiliser le hook hook_menu pour connecter une page aux différentes parties de Drupal : menu, module de traduction, templates, etc.
hook_permission Drupal 7 : permissions d’accès pour différents rôles
Lors des leçons précédentes, nous avons affiché des pages et des blocs à différents endroits, en utilisant aussi les propriétés 'access arguments' et 'access callback' pour définir des restrictions d’accès aux pages. Dans cette leçon, nous allons créer une possibilité d’édition plus flexible des droits d’accès aux opérations via des pages d’administration. Pour cela, nous utiliserons le hook_permission() (dans Drupal 6, c’était hook_perm()).