Voilà, voilà... Fin de l'aventure...

 

Fermeture de kolossaldrupal.org dans...


Bonjour tout le monde,

Drupal évolue, les versions changent et Kolossaldrupal.org était essentiellement consacré à la version 6 de Drupal.

Autant dire que les infos présentées ici commencent à dater...

Faute de temps, je ne peux plus garder le site Kolossaldrupal à jour...

Je vous aurais bien proposé de reprendre le flambeau mais... c'est tellement simple de nos jours de se faire son propre site à soi...Pourquoi s'embêter alors ? :-)

Ce site restera donc en l'état, tel qu'il était en 2011...

Ah la la ! Cela ne nous rajeunit pas !

Manuel Vila - Avril 2016

Utiliser les champs « Référence de nœuds » avec le module Node Import

Traduction de l'article de Michael Anello : Using Node Reference Fields with the Node Import Module


Le très utile module Node Import est parmi nous depuis 4 ans environ, ce qui est une éternité dans le monde Drupal, et d'autres brillants, récents modules d'import sont apparus sous les feux de la rampe. Bien que ces derniers soient très certainement utiles pour beaucoup d'applications, les modèles éprouvés peuvent aussi faire l'affaire. Dans cet article, je vous montrerai comment utiliser le module Node Import pour importer des données au format CSV (valeurs séparées par des virgules) et les lier à des contenus existants dotés de champs node référence, texte et entiers - y compris des cases à cocher multi-sélection.

C'est plus facile qu'on pourrait le croire, le travail le plus compliqué résidera dans la préparation de vos fichiers CSV - le plus souvent via un tableur. Une fois que les fichiers seront prêts, la procédure d'importation est plutôt banale. J'indiquerai ce qu'il y a à connaître pour que les fichiers CSV soient manipulables par le module Node Import et comment réaliser l'importation depuis Drupal.

Le but

Supposons que vous ayez un site web consacré à la varappe et vous voulez pouvoir y indiquer les coins d'escalade et leurs itinéraires. Les données du site vous ont été fournies sous forme de quelques fichiers CSV - un pour les zones et un pour les itinéraires. Vous allez importer les données dans Drupal - et là vient le point important - tout en conservant la relation entre les zones et les itinéraires.

Les fichiers CSV

Jetons un œil aux deux fichiers CSV, ils sont liés par un champ Area ID présent dans les deux fichiers. Voici un aperçu du fichier areas.csv :

unrf-1.png

Et voici un aperçu du fichier routes.csv:

unrf-2.png

La relation entre les deux fichiers est établie par le champ Area ID. Chaque zone possède un identifiant Area ID unique et chaque itinéraire possède un Area ID qui référence une zone déterminée. Ainsi, l'itinéraire Ankles Away, dont l'Area ID est 2 fait partie de la zone Foster Falls. Jusque là tout va bien.

A part quelques champs, les autres données du fichier parlent d'elles-mêmes. La colonne Closest Parking Area indique un kilométrages. Une valeur « 0 » ne veut pas dire « zéro kilomètre » mais « moins d'un kilomètre ». Nous devrons en tenir compte lorsque nous paramétrerons les types de contenus à l'étape suivante.

L'autre cas particulier est le champ Suitable for (niveau). Ce champ est en fait un champ de sélection multiple, c'est à dire qu'il affichera une liste multi-sélection ou une série de cases à cocher dans lesquelles l'auteur du contenu pourra choisir plus d'une valeur. Dans le fichier CSV, ces valeurs multiples devront être séparées par un double-pipe (||) :

unrf-3.png

Le dernier cas particulier, et probablement le plus important de tous, est le champ Area ID. Quand nous importons ces données dans Drupal, nous voulons créer une relation entre les zones de varappe et les itinéraires via un champ Node Référence. Dans le module Node Import cela peut se faire de l'une des deux façons suivantes :

  • Si les noms des champs figurent dans votre fichier de données, on utilise le widget liste de sélection.
  • Si l'ID node reference figure dans votre fichier, alors on utilise le widget champ texte à auto-complément.

Dans mes données itinéraires, je n'ai pas vraiment l'une ou l'autre de ces infos. Faites attention, ne confondez pas les Area ID du fichier de données avec les Node ID qui identifient les contenus de votre site. Si vous importiez les données dans un site Drupal vierge, vous pourriez vous en tirer sans trop de dégâts, mais s'il existe déjà du contenu dans votre site les Node ID des zones importées seront radicalement différents des Area ID du fichier de données. C'est pour cette raison que je préfère la première méthode, même si elle implique de bidouiller le fichier CSV « itinéraires ».

Ce que vous devrez faire c'est remplacer le champ Area ID avec le champ Area Name correspondant du fichier CSV Routes. Chaque tableur dispose de plusieurs méthodes pour réaliser ce remplacement (manuellement, rechercher/remplacer, macros...) aussi je ne rentrerai pas dans les détails. Au final, votre fichier CSV Routes devrait ressembler à ceci :

unrf-4.png

Une discussion Drupal sur l'importation des données et sur les champs node reference .

La plupart du temps, la résolution de ces « cas particuliers » est la plus grosse partie des « bidouilles » à faire sur les fichiers CSV.

Les types de contenus

On peut aisément voir que nous aurons besoin de deux types de contenus reliés l'un à l'autre par la zone de varappe. Je supposerai que vous savez comment paramétrer des types de contenus - lisez cet article si vous avez des doutes.

Quoiqu'il en soit, voici un aperçu des types de contenus dont vous aurez besoin :

unrf-5.png

unrf-6.png

La structure de ces types de contenus est disponible en téléchargement à la fin de cet article pour que vous puissiez faire vos propres essais.

Lorsque vous créez vos types de contenus, il y a quelques petites choses que vous devez avoir à l'esprit pour que l'importation des données se passe le mieux possible :

  1. Donnez à vos champs le même nom que les noms de colonnes de votre fichier CSV. Cela accélérera le paramétrage de Node Import.
  2. Lorsque vous importez des données qui seront disponibles en tant que multi-sélection (que ce soit sous forme de liste, de cases à cocher ou tout autre type de widget), assurez-vous d'avoir autorisé plus d'un choix dans la page de configuration CCK.
  3. Lorsque vous paramétrez un champ qui utilise une liste de sélection, des boutons radio ou des cases à cocher, assurez-vous que toutes les valeurs possibles de vos données CSV figurent comme valeurs autorisées dans le champ Liste des valeurs autorisées
  4. Rappelez-vous de la colonne Closest Parking Area - ses données sont des entiers qui indiquent la distance entre la zone de stationnement et la zone de varappe. Pour ce type de champ, vous paramétrerez votre champ CCK pour qu'il contienne la valeur de la colonne mais pour qu'il affiche un libellé plus explicite :

    unrf-7.png

  5. Lorsque vous paramétrez le champ Référence de nœud, vous voudrez sans doute le rendre obligatoire et le restreindre au type de contenu spécifique que vous importez. Aussi, dans cet exemple, puisque nos « itinéraires » CSV contiennent les noms « Area Name », assurez-vous de choisir le widget Liste de sélection.

Paramétrer l'importation

Vos fichiers CSV sont prêts et vos types de contenus aussi, il est temps de procéder à l'importation des données !

Puisque la version Drupal 6 du module est toujours « en cours de développement », vous allez utiliser la latest development release (j'ai pris la version 6.x-1.x-dev du 22 avril 2009). Ceci parce que la dernière release candidate (6.x-1.0-rc4) a quelques bugs qu'on voudra s'éviter. Une fois le module téléchargé et activé, allez dans Administrer > Gestion du contenu > Import content (admin/content/node_import) et cliquez sur New import.

unrf-8.png

L'importation de nodes se fait en plusieurs étapes - la première d'entre elles ne faisant qu'afficher quelques infos mais sachez d'ores et déjà que vous ne devez pas utiliser les boutons page précédente et page suivante de votre navigateur, au risque de voir les choses se barrer en sucette (petite parenthèse linguistique : Michael Anello parle de Pear-shaped, une de ses expressions britanniques favorites. NdT).

La première décision importante que vous prendrez sera de dire vers quel type de contenu vous allez importer les données. Lorsqu'on a affaire à des données qui sont utilisées comme référence dans une relation, il faut toujours commencer par importer les « données de base ». Dans notre cas ce sont les données « Climbing Areas » puisque les données « climbing routes » se réfèrent aux données « Climbing Areas ». Si nous procédions dans un ordre différent, le contenu « Climbing Routes » n'aurait rien à quoi se référer pendant l'importation de ses données et... bonjour les dégâts. Nous sélectionnons donc le type de contenu « Climbing Area » et procédons à l'importation des données.

unrf-9.png

Ensuite, vous uploaderez le fichier areas.csv (disponible à la fin de l'article). Chaque fois que vous effectuez une importation, les fichiers de données sont sauvegardés dans le dossier /files/imports/. C'est pourquoi ils sont tous affichés lorsque vous vous rendez sur cette page :

unrf-10.png

Dans l'étape suivante, vous configurez les options du fichier. Puisque votre fichier est un simple fichier de données au format CSV, il n'y a rien à modifier ici. Assurez-vous simplement que vos paramètres ressemblent à ceux-ci :

unrf-11.png

Vers le bas de la page, le module affiche quelques lignes de données pour vous permettre de vérifier que tout va bien.

Étape 4, les choses intéressantes commencent avec « Mapping File Columns ». C'est ici que vous établissez la correspondance entre les champs de votre fichier CSV et ceux du type de contenu CCK choisi dans la première étape du processus d'importation de données. Vous vous souvenez avoir lu qu'il fallait donner aux champs de votre type de contenu le même nom que les champs de votre fichier CSV ? Si vous avez procédé ainsi, il n'y a presque rien à faire dans cette étape. Sinon, vous devrez établir cette correspondance manuellement.

unrf-12.png

Pour les champs CCK qui sont de type Zone de texte, vous pourrez également choisir spécifier l'option input format. Puisque vos données ne disposent pas de cette information (la plupart n'en dispose pas), laissez le paramétrage sur none. Il en va de même pour Authoring information, Publishing options et quelques autres paramètres, vous pouvez les laisser sur None, à moins que votre fichier CSV ne dispose de données spécifiques à cet égard. Cliquez sur Next une fois que le paramétrage vous convient.

L'étape 5 peut présenter quelques paramètres supplémentaires qui dépendront du type de données que vous importez. Dans notre cas nous pouvons directement passer à l'étape 6.

Cette étape concerne les valeurs par défaut. Vous pouvez indiquer ici les valeurs par défaut des champs marqués comme None à l'étape 4. Le module s'en sort plutôt bien en suggérant des valeurs par défaut possibles mais n'hésitez pas à les parcourir et à les modifier selon vos souhaits.

L'étape 7 est le résultat de ce qui précède (Step 7 is where it all comes together. "it all come together", expression idiomatique dont je n'ai pu trouver la traduction. Si quelqu'un la connaît ?... Merci de faire passer :-)), le module affiche un aperçu des données telles qu'elles seront après l'importation. Lors de toute importation de données, il est primordial de vérifier cet aperçu pour être sûr que les données seront correctement traitées. Et de s'assurer également que tous les champs non-texte (listes de sélections, cases à cocher, etc) disposent des valeurs correctes.

unrf-13.png

Dans cet exemple, vérifiez le champ Closest Parking Area. Si vous vous rappelez bien, les données importées étaient des entiers, et dans l'aperçu vous pouvez constater que les valeurs indiquées correspondent aux bonnes valeurs paramétrées dans la page de configuration du champ CCK. Tout va bien.

Et puisque tout va bien, cliquons sur le bouton Next pour la suite des opérations.

A l'étape 8, la dernière, le module vous permet de donner un nom à votre importation (j'ajoute généralement essai 1, essai 2, etc au nom par défaut, jusqu'à ce que j'obtienne ce que je veux). Cette page fournit un bref résumé de ce qui est sur le point de se produire avec certains des paramètres qui seront utilisés. Lorsque cela vous convient, cliquez sur Start import et éblouissez-vous du résultat de votre travail.

unrf-14.png

Félicitations ! Vous avez importé les 3 lignes de votre fichier CSV areas.csv. Poursuivez et vérifiez-les via admin/content/node page, vous verrez que ce sont maintenant des nodes Drupal complètement fonctionnels.

Tout n'est cependant pas terminé, il reste à importer les climbing routes. Le processus est pratiquement le même que pour l'importation des données climbing areas, à l'exception des points suivants :

  1. Sélectionnez le type de contenu Climbing Route.
  2. Uploadez le fichier routes.csv.
  3. Pas de changements.
  4. Pour le champ Climbing Area, sélectionnez la colonne Area Name. C'est là que se produit la magie nœud de référence ! Tout le reste devrait coller.
  5. Pour le fichier routes.csv, Souvenez-vous qu'il y a un champ Suitable for qui autorise plusieurs valeurs. Cette étape assure simplement que les valeurs multiples dans le CSV sont séparées par un double-pipe.
  6. Pas de changement.
  7. Vérifiez dans l'aperçu que les données Climbing Area pointent réellement vers les nodes existants importés depuis areas.csv. Wouaouw !
  8. Pas de changement.

Une fois l'importation réalisée, c'est fini. Vous avez importé avec succès des données relationnelles dans Drupal, et vous avez gardé intacte leur relation. Allez donc vous servir une boisson fraîche, vous l'avez bien mérité.

Affichage

Tout comme n'importe quel node ayant un champ Node référence, un node « Climbing route » n'affiche pas seulement ses données mais également un lien vers le node « Climbing Area » auquel il se réfère :

unrf-15.png

On peut tirer partie de cette relation entre deux types de contenus selon les voies classiques - habituellement en utilisant le module Views.

Résumé

Alors que cet exemple ne portait que sur un petit nombre de données, il est important de remarquer que le processus aurait été exactement le même si nous avions eu 10 000 zones et 30 000 itinéraires (le module utilise BatchAPI qui autorise de gros volumes de données tout en informant l'utilisateur de la progression des opérations). C'est un module extrêmement puissant qui a sans aucun doute sa raison d'être dans l'eco-système Drupal.

Le module Node Import importe bien plus de types de champs que ceux abordés ici, comme des références utilisateurs, des images, des dates et des données du module Location. Il peut même importer des utilisateurs ainsi que des termes ou des catégories de taxonomies.

Jetez -y un coup d'œil et dites-nous en commentaires ce que vous avez importé !

Michael Anello - DrupalEasy.com

Fichier attachéTailleAccèsLast download
drupaleasy_nodeimport.zip10.29 Ko0Not yet downloaded