Drupal – Créer un service sur mesure dans Drupal
Dans cet article, on va créer un service sur mesure au sein de Drupal. Créer un service peut se révéler très utile, car comme il est dit dans la définition en anglais donnée ci-dessous, vous pourrez accéder un ensemble de méthodes permettant de connecter des applications distantes à du contenu émanant de votre site sous Drupal. Une application distante faite sous Flex ou sous Flash par exemple. Par ailleurs, on s’approche assez près alors même que nous sommes dans un CMS, d’un développement et du vocabulaire proche d’un Framework PHP.
Services are collections of methods available to remote applications. They are defined in modules, and may be accessed in a number of ways through server modules.
Que vous utilisiez la version 5 et + ou la version 6 de Drupal, le fonctionnement est le même. Il est nécessaire d’avoir activé les modules suivants :
- le module
Service
- le module
Node Service
Pour les besoins de cet article, notre environnement de travail sera une installation de Drupal 5.14 en local.
- Frontend –
http://127.0.0.1/DRUPAL/drupal-5.14/
- Backend –
http://127.0.0.1/DRUPAL/drupal-5.14/admin/
Pour comprendre comment installer cet environnement PHP-MySQL, reportez-vous aux articles de ce blog :
Un autre article sur Drupal qui fait référence au même environnement.
Activer les modules
Pour rendre effectif le service, il faut retourner dans l’administration et activer sous l’onglet “Core – required” à l’URL suivante http://127.0.0.1/DRUPAL/drupal-5.14/admin/build/modules
, les
– Dans l’onglet Services, le module “Services”
– Dans l’onglet Services – services, le module “Node Service”
activation du module Services
activation du module Node service
Une fois modules activés, votre Drupal est désormais en mesure de se comporter comme une véritable web application au même titre que Google, Flickr, Facebook. Vous pouvez désormais offrir la possibilité à d’autres site de publier du contenu en provenance de votre site
Voir quels sont les services activés
Un lien “Services” apparaît dans la colonne de gauche de navigation sous le lien “Modules”
Dans la page “Services”, il faut aller dans l’onglet “Settings” et décocher les deux checkboxes suivantes :
Use keys
Use sessid
désactivation de Use keys
et Use keys
Creér un Content type
nommé Personne
On va créer de toutes pièces un content type
nommé Personne correspondant à une entrée dans un carnet d’adresse. Quel intérêt, il y a-t-il à créer un Content type
me direz-vous ? Cela vous permet en autre de gérer du contenu récurrent des fiches de musique pour un site de musique, des profils d’intervenants pour un site évènementiel, des listes d’hôtels pour un site de réservation. Etc vous isolez à l’aide de Drupal un contenu spécifique que vous pourrez ensuite appeler via une API différente via une datagrid sous Flex par exemple.
Name * => Personne
Type * => personne
Description => C’est le contenu type d’un carnet d’adresse
La valeur description est optionnel, les deux autres étant obligatoires (signalés par une *). Néanmoins, il n’est pas inutile de commenter certains types dans la mesure où vous n’êtes pas toujours le seul administrateur du contenu, il peut donc être utile de préciser un peu la nature du contenu en question. C’est un peu la fonction du commentaire dans des lignes de code !
les champs Name *
, Type *
et Description
Title field => Nom
Body field => Adresse
Les autres spécifications restent les mêmes par défaut.
le Content type
nommé Personne
Insérer un peu de contenu
On va créer du contenu bouchon pour les besoins de notre démonstration…. Cela ressemble pour commencer à un jeu de Monopoly ! A titre d’information, nous indiquons en italique et entre parenthèse la valeur nid
qui nous est retournée par Drupal après l’insertion.
Paul
15, rue de la paix
(12)Pierre
2, Place du marché
(13)Vanina
34, rue des soupirs
(14)Nelson
Impasse Napoléon
(15)
Une fois ce contenu créé, on peut aller vérifier que le contenu que nous venons d’insérer est bien inclus dans un noeud ou node
, à l’aide de Services > node.load
. Dans notre exemple, le nid
pour Paul est 12
. On va se servir des fields
pour ne retourner que l’essentiel attaché à une personne à savoir : nid,title,body
. Attention, vous devez écrire sans espace et le nom des valeurs en anglais…
Préparer des fichiers pour notre module
Nous allons créer un répertoire du nom de personne_service
à l’endroit suivant sites > all > modules > personne_service
. Nous sommes sur Mac dans la répertoire htdocs de MAMP.
Il reste ensuite à créer deux fichiers : personne_service.info
, personne_service.module
Le fichier personne_service.info
name = Service to the personne version = 1.0 description = A service for address book package = Services - services dependencies = services |
Mieux vaut écrire les variables du fichier .info
en anglais
name = Service à la personne version = 1.0 description = Un service pour insérer un carnet d'adresse package = Services - services dependencies = services |
La valeur dependencies
est là pour rappeler que notre service Personne
ne peut être utilisé sans l’activation du module services
Le service Personne
est inactif
Le service Personne
est activé
Le fichier personne_service.module
Nous allons testé dans un premier la fonction personne_service_all
de notre service module personne_service_service
, le nom de cette fonction se compose du nom du module personne_service
auquel est ajoutée la mention _service
, cette fonction retourne des tableaux multidimensionnels arrays of arrays
.
/* un simple retour pour un besoin de test */ /* return "Bonjour Hecube"; */ |
Le fonction marche, elle retourne return "Bonjour Hecube";
Une fois désactivée et une fois complétée comme dans le code ci-dessous, on aura alors les 4 nœuds ou résultats qui seront retournés.
Dans l’écriture de la requête, mieux vaut mettre la valeur {node}
car Drupal identifie la valeur automatiquement et la remplace par le nom de table correct $result = db_query("SELECT * FROM {node} WHERE type='personne' ");
. Sinon, c’est la fonction node_load
de Drupal qui va nous permettre de retourner un noeud complet.
On va rajouter des arguments dans fields
pour retourner un moins grand nombre de valeurs dans notre array.
Ci-dessous la vesrion complete du code source de personne_service.module
.
Le code source complet de personne_service.module
<?php function personne_service_service () { return array ( array ( /* la méthode */ '#method' => 'personne_all', /* la fonction */ '#callback' => 'personne_service_all', /* les filtres */ '#args' => array ( array ( '#name' => 'fields', '#type' => 'array', '#optional' => true, '#description' => 'Une liste de champs pour filtrer notre carnet avec les adresses' ) ), /* le retour */ '#return' => 'array', /* description */ '#help' => 'Retourne une liste de personne' ) ); } /* V00 */ function personne_service_all ($fields = array() ) { /* un simple retour pour un besoin de test */ /* return "Bonjour Hecube"; */ $result = db_query("SELECT * FROM {node} WHERE type='personne' "); $nodes = array (); while ($node = db_fetch_object($result)) { $nodes[] = node_load($node); } return $nodes; } ?> |
Comment installer et activer les services et webservices sous Drupal 6
Il vous reste aussi à télécharger le module Services 6.x-0.15 (services-6.x-0.15.tar.gz) à l’adresse suivante http://drupal.org/project/services) à dézipper le tout et à l’envoyez en FTP le répertoire services
dans /chemin_vers_drupal/drupal_install/modules
.
Il vous reste à télécharger le module Web Services 6.x-1.02 (webservices-6.x-1.02.tar.gz) à l’adresse suivante http://drupal.org/project/webservices) à dézipper le tout et à l’envoyez en FTP le répertoire webservices
dans /chemin_vers_drupal/drupal_install/modules
.
Les services et webservices sous Drupal 6 sont activés
Pour aller plus loin
- Un article de planète Drupal.fr pour créer un module
http://planete.drupalfr.org/node/514 - Une bonne mise en forme sur Drupal par drupalfr.org
http://drupalfr.org/node/4677 - L’ensemble des modules
http://drupal.org/project/modules - Le tag de ce blog concernant Drupal
http://social.hecube.net/blog/tag/drupal/