identifiant unique d'un noeud, par type de contenu / section de site

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 besoin d'assigner aux noeuds d'un certain type un identifiant absolument unique et automatique (pour éviter les erreurs), et de l'afficher dans le titre du noeud pour qu'il puisse être utilisé ensuite (dans un champ nodereferer). J'avais d'abord pensé au node id, évidemment. Indépendamment du fait qu'il ne peut apparaître dans le titre qu'au deuxième enregistrement, ce qui encore est gérable, le problème vient du fait que le système doit pouvoir être utilisé sur un gros site, une plateforme en fait (je ne sais pas encore quel système sera utilisé, un site sectionné ou un multisite). Et qu'aux noeuds de ce certain type s'ajoutent de multiples autres noeuds. Il s'ensuit que le nid risque de prendre du poids et de devenir assez peu user-friendly.

Pourriez-vous me dire si
- en multisite, les nid sont "remis à zéro" sur chaque site - ce qui ramènerait le problème à de plus justes proportions
- il existe une astuce pour que cela soit le cas
- les modules de sectionnement (http://drupal.org/project/sections...) le font
- il est possible d'assigner un numéro d'identifiant à un type de contenu, en définissant un préfixe par site (ou section de site)
- il existe une solution simple à mon problème !

Merci d'avance,

Version de Drupal : 

absolument, non, mais je cherche les moyens possibles d'identifier facilement un noeud, pour pouvoir y faire référence dans un autre noeud sans risque de confusion ; je voudrais que cette identification se fasse le plus possible sur des critères intellectuels (valeurs de certains champs) et non techniques, car les utilisateurs ne sont pas censés avoir une familiarité technique avec l'outil.

Le problème que pose le nid est double
- au moment où j'enregistre le noeud, le nid n'apparaît pas dans le titre (il faut l'enregistrer deux fois pour cela), car il est affecté au moment de la création - donc Drupal ne le "connaît" pas avant. Si d'aventure plusieurs noeuds ne sont pas réenregistrés, il y a risque d'homonymie entre plusieurs noeuds (ce que je veux éviter).
- gros site = nombreux noeuds = nids à plusieurs chiffres = risque d'erreur accru (faute de frappe...)...

Bref, cela n'est pas très ergonomique. L'intérêt de retenir Drupal dans le cas du projet sur lequel je travaille est justement ce système de nodereferrer qui permet d'afficher à l'écran plusieurs contenus en même temps.

En fait j'aurais une solution, consistant à faire affecter un sous-identifiant par les utilisateurs (notice N23 par exemple) mais cela veut dire contrôler l'unicité du contenu (sans parler de la régularité de l'incrémentation) ; il y a un module qui fait cela (Unique Field) mais j'ai un impératif absolu : rendre mon modèle le moins dépendant possible aux modules extérieurs (pb de pérennité). J'essaie donc de savoir s'il y a un moyen en passant par le Core ou les gros modules (CCK..).

Merci de ton intérêt pour mon problème !

Pour le premier problème, tu peux récupérer le nid avant/pendant la création du node dans hook_insert (à vérifier), parce que la variable $node est passée par référence. Donc, après un node_save, $node->nid contient la valeur qui vient d'être enregistrée.

Sinon, c'est un type de problème classique, où il te faut un identifiant machine et un identifiant utilisateur. D'expérience, je préconise de faire les deux. Donc, dans ton cas, de créer un champ CCK dont tu vérifieras l'unicité et que tu utiliseras comme référence pour tes autres nodes.

Une vieille règle dit que l'identifiant d'un enregistrement ne doit pas être lui-même porteur d'information. A chaque fois que j'ai enfreint cette règle je m'en suis mordu les doigts, pour ne pas dire pire.

Merci pour tes remarques. Je vais voir de quelle façon c'est applicable dans mon cas. Qui n'est pas très simple :-) ... Pour la dernière remarque tu as raison, mais l'identifiant machine étant déjà hermétique au contexte, quel problème y a-t-il à ce que l'identifiant utilisateur récupère des infos dans les champs (dans la mesure où ces infos sont contenues ailleurs et ne sont que récupérées pour la génération automatique ; donc le cas échéant on peut modifier la génération et remettre à jour les titres sans perdre d'information) ?