Submitted by Marie-Hélène on
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,
personne ne voit ?
Permalien Soumis par Marie-Hélène le 20 Mars, 2009 - 11:14
personne ne voit ?
Je ne comprends pas bien
Permalien Soumis par Numerizen le 20 Mars, 2009 - 11:41
Je ne comprends pas bien pourquoi tu veux absolument te passer du nid. Peux-tu reformuler ton problème ?
absolument, non, mais je
Permalien Soumis par Marie-Hélène le 23 Mars, 2009 - 11:36
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,
Permalien Soumis par Numerizen le 23 Mars, 2009 - 12:02
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
Permalien Soumis par Marie-Hélène le 23 Mars, 2009 - 16:27
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) ?
Aucun. Et justement, dans ce
Permalien Soumis par Numerizen le 23 Mars, 2009 - 16:40
Aucun. Et justement, dans ce cas, on observe la règle, donc ça colle :-).
ah, ok :-) Merci !
Permalien Soumis par Marie-Hélène le 23 Mars, 2009 - 17:04
ah, ok :-)
Merci !