[Résolu] Import de contenus CCK via CSV avec Feeds

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'ai créé un contenu personnalisé à l'aide de CCK et j'aimerais remplir et mettre ensuite à jour ma base via csv. J'ai donc essayé d'utiliser le module Feeds pour faire cela.

Les contenus que je veux renseigner provienne d'une ERP et possèdent déjà leur propre identifiant. J'ai donc essayé d'importer mes contenus, et le seul problème qui se pose vient de cet identifiant unique.

Lorsque je ne m'occupe pas de l'identifiant, l'import se fait correctement et il n'y a pas de soucis. Lorsque j'essaie de renseigner le nid à l'aide de mon identifiant provenant de l'ERP, qui est lui aussi un entier, rien ne va plus : les contenus s'enregistrent bien dans la table correspondant à mon contenu cck dans la base de données mais le vid se retrouve à 0 et rien ne s'enregistre dans la table node donc rien ne s'affiche dans mon site.

Si je ne renseigne pas le nid moi-même, comment puis-je utiliser feeds pour mettre à jour mes contenus via csv ?

Avez-vous une solution à mon problème ? Serait-ce un problème de configuration de ma part du module feeds ?

Merci d'avance pour vos réponses.

Version de Drupal : 
Tags : 

Bonsoir,

Je vous réponds de mémoire. La première fois que vous alimentez votre base via feeds, les nodes se voient attribués le nid automatiquement par Drupal, au fur et à mesure de leur création. L'identifiant extérieur n'a donc pas de valeur ici, disons qu'il sera, au mieux, un champ CCK ordinaire de votre type de contenu.

Pour les mises à jour, voilà comment je procéde. Je possède mes "plages" de nid correspondant à mon type de contenu. Ce sont ces plages que j'exporte avant chaque actualisation que je fais via un tableau csv issu d'excel. J'ai donc une manip manuelle à faire dans la préparation de mon csv ; incorporer une colonne comportant les nid.

Lors de l'import, feeds (attention, un patch était nécessaire je crois me souvenir pour qu'il y ait bien subsitution et non pas création supplémentaire de nodes) détruit les fiches existantes et les recrée actualisées, le nid étant nécessaire pour faire ce ménage.

Ce n'est pas forcément très clair, je pourrai éventuellement préciser, mais le mieux est de tester cette création, puis actualisation avec Feeds (qui est vraiment un excellent module).

Bonjour et tout d'abord merci pour votre réponse.

La version actuelle de feeds que j'utilise, à savoir la 6.x-1.0-beta11, intègre la possibilité de mise à jour à l'import si le contenu existe déjà. Les mises à jour qui devront être faites devront être très fréquente et je n'ai donc pas la possibilité de modifier le csv dès que celui-ci arrive.

Je recherche une solution me permettant donc une automatisation quasi totale du système de mise à jour. L'idéal aurait été la possibilité de renseigner non pas le nid, mais le vid, qui est la clé primaire des tables de contenu cck, et de permettre une mise à jour en fonction de cet identifiant.

Comme je l'expliquais plus tôt, le problème vient de mon vid se retrouvant à 0. Si j'arrivais à avoir un fonctionnement similaire basé non pas sur le nid mais sur le vid, mon problème serait résolu, mais je ne possède pas encore la maîtrise de développement de module nécessaire à la modification du module.

Encore merci d'avoir pris du temps pour me répondre.

Renseigner le nid ou le vid ne me paraît pas une bonne idée, en vertu du principe qui dit qu'un identifiant d'enregistrement ne devrait pas être porteur d'information.

Je préconiserais plutôt d'utiliser comme GUID (en vocabulaire Feeds) votre référence, et de laisser Drupal gérer ses nid et vid tout seul. Cela vous donnera bien plus de souplesse par la suite.

Bonjour et merci pour votre réponse,

Cependant, je ne suis pas vraiment du même avis. L'élément que je veux renseigner étant un identifiant unique sortant d'une base de données d'un autre système, il me semble logique de le mettre comme identifiant unique (ou clé primaire) du système qui va être utilisé (à savoir Drupal).

Il n'y aurait pas d'intérêt à créer un champ pour stocker mon identifiant qui n'aurait plus de raison d'être si un autre identifiant est utilisé. Le nid étant la clé primaire des noeuds, je ne voudrais pas la renseigner moi-même, mais renseigner le vid qui lui est bien l'identifiant des contenus cck.

Concernant le GUID, mes tests sur ce dernier n'ont pas été concluant mais si vous pensez que la solution peut se trouver avec cela, j'y regarderai de nouveau de plus prêt.

Tous les avis étant discutables et bon à entendre (ou plutôt lire), je vous remercie d'avoir donné le votre et vais étudier l'utilisation du GUID.

Le GUID est indispensable à Feeds pour savoir quelles nodes doivent être mises à jour ou supprimées lors d'un import. Donc sur ce sujet, il ne s'agit pas de goûts et de couleurs, mais bien de l'utilisation du module. Il me semble même qu'il refuse d'exécuter un "importer" ne comportant pas de GUID.

Le vid est prévu pour être utilisé par le système de révisions de Drupal, et seulement lui. Pas mal de module vont tripoter ces données en partant du principe qu'elles ont une certaine cohérence liée à l'utilisation que le core en fait. Elles servent en plus de clef étrangères pour d'autres tables, et gérer les mises à jour de tout ce petit monde promet de bonnes soirées.

Pour le reste, je suis absolument convaincu que vous regretterez votre choix, et je base mon avis sur pas mal d'années d'expérience de migrations de données diverses et variées. Je pense que la logique interne d'un système ne devrait pas être confondue avec la logique utilisateur d'un applicatif donné. Avec un ID pour le système et un pour le user, chaque contenu peut être identifié dans les deux contextes, sans que l'un contraigne l'autre, et en évitant les surprises liées au fait que le système en question peut utiliser les ID pour des choses non prévues au départ. Il vaut mieux un peu de redondance que des bugs, même si la beauté formelle de la solution doit en souffrir un peu.

Mais bon, je n'ai pas l'âme missionnaire, donc je n'argumenterai pas plus sur ce sujet. Tous mes voeux vous accompagnent ;-D.

Rebonjour,

Pour information, l'import s'effectue sans problème si le GUID n'est pas utilisé (petite "coquille" dans le développement du module ou volonté propre des développeurs ? ).

N'étant pas encore réellement familier dans l'utilisation de Drupal, j'avoue ne pas avoir encore entièrement assimilé sa logique. Cependant, je ne regrette en aucun cas mon choix pour le moment car il n'y a pas encore de choix à proprement parler et lorsque les réponses sont accompagnées d'explication et d'arguments comme c'est le cas actuellement, je ne vois pas d'inconvénient à suivre les informations qui me sont données.

Ayant laissé de côté mon utilisation de l'import pour cette fin de semaine, je n'aurai pas le temps de refaire des tests dessus mais je ferai signe si jamais je trouve ma voie en suivant la piste du GUID.

Encore merci et bon week-end.

Edit : Les tests avec le GUID sont concluants. Peut-être n'avais-je pas coché la case 'Unique target' ou je pensais avoir essayé avec le GUID alors que ce n'était pas le cas. Toujours est-il que ça fonctionne bien et que le fonctionnement est celui dont j'avais besoin.

Bonjour, je rebondis sur votre discussion pour demander de l'aide à propos de Feeds. J'utilise Feeds XPath Parser en plus de Feeds pour parser des fichiers XML qui concernent des livres. J'ai un problème avec le GUID. C'est sensé être un identifiant unique or lorsque je génère deux fois le même import, je trouve des doublons ! Après vérification en bd, je trouve deux fois le même GUID. Ce n'est pas logique pour identifiant unique (unique target) ?

Bonjour,

Je n'ai pas encore eu à utiliser Feeds avec XPath parser, mais si le GUID est créé en doublons, cela doit être un problème de paramètrage de l'import. Avez-vous bien coché la case unique target ?

Etant donné que ce sujet a été mis en résolu et que le titre de ce dernier ne correspond pas parfaitement à votre problème, je vous conseillerais de créer un nouveau sujet pour avoir des réponses d'utilisateurs ayant plus d’expérience que moi en utilisation de Drupal et de feeds.

Bonne chance à vous.

Merci pour la rapidité de votre réponse. Je suis tout nouveau en informatique et j'utilise pour la première fois un forum ! Je vais suivre votre conseil et créer un nouveau sujet.
Cordialement.