nid dans le titre d'une page

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'utilise le module Automatic Nodetitles pour générer automatiquement un titre selon la valeur d'autres champs ou variables. J'aimerais insérer le numéro du noeud (nid) dans le titre. Dans le modèle de génération du titre, j'ai donc mis entre autres [nid], mais ça ne fonctionne pas, car la variable $node->nid de la page en création n'a pas encore de valeur (on peut le vérifier par exemple avec print_r($node)). Si je réédite une page déjà créée, le nid va bien être inséré dans le titre cette fois.

Comment faire en sorte que ça soit inséré dans le titre dès la création d'une page?

Merci!

Version de Drupal : 

Hello,

A priori, c'est impossible : Drupal lui-même ne connaît pas le nid qu'un node aura au moment où il t'affiche le formulaire de création de page, donc comment impossible pour lui de l'afficher.

La seule solution serait de créer programmatiquement une page vide, récupérer son nid, et l'éditer... un peu lourd.

Et, si je peux te demander, quel est l'intérêt de la manip ?

Impossible n'est pas Drupal...
Sincerement j'avais un gros doute et je pensais que c'etait pas possible, mais en fait carrement que si, lis mon 1er message Vincent, la doc sur le Workflow de FAPI, le hook_insert/update et jette un oeil a pathauto qui justement permet cette manip de mettre le nid ds le titre du module.

D'ailleurs je pige pas pourquoi ils ont fait un nouveau module si pathauto est si puissant...

Salut,

Avant de plonger dans ces milliards de doc (qui, pour certaines, ne me paraissent pas d'une clarté évidente), c'est une question de logique : quand tu affiches le form de création d'un noeud [car si j'ai bien compris, c'est de cette page-là dont parle luron], le noeud lui-même n'existe pas encore, il n'a donc PAS ENCORE de nid.

C'est au moment de l'insertion en base que le nid est attribué.

Non ?

Certes mais de la maniere dont agis pathauto, il suffit juste de modifier le titre a posteriori, apres l'insertion dans la base et c'est justement le role de ce hook, il agit juste apres l'insertion d'un node, donc c pas bien complexe il suffit de faire un update sur la table des nodes...

Enfin bon :D

Bonjour tostini,

Je viens de faire un test avec pathauto, qui permet d'insérer le nid dans le titre.

Le problème, c'est que pathauto ne permet pas de cacher le champ Titre dans le formulaire de céation d'une page, comme c'est le cas avec Automatic Nodetitle. Le champ Titre est donc encore obligatoire, il faut y mettre une valeur. C'est donc seulement l'adresse URL de la page qui va être généré automatiquement, mais pas aussi le titre.

Ouais scuse, en fait j'ai confondu titre et path :( mais bon la comparaison avec pathauto est surtout pour le fait qu'il est possible d'affecter un alias a posteriori par un numero de node lors de sa creation et donc d'apres moi il est tout a fait possible de faire la meme manip avec un titre.

Je pense perso qu'y a un bug sur le module qui evite cela mais bon j'ai pas mis les mains ds le cambouis pour prouver mes dires...

Bonjour drupalfrance,

Et, si je peux te demander, quel est l'intérêt de la manip ?

Je me suis dit que ça serait bien pour différencier des pages dont les titres sont générés automatiquement et qui peuvent parfois avoir la même valeur. Par défaut, un chiffre serait alors inséré à la fin du titre, mais je trouve que ce chiffre risque d'être confondu avec un numéro d'arrondissement quand le titre se termine par une ville (par exemple ...Paris-1, ...Paris-5, etc.). À moins de faire insérer ce chiffre automatique au début du titre et non à la fin?

Bonjour ,
je suis sur que c est pas possible de connaitre le nid a l avance.

j ai ce même problème :
je prend une page 'story' (ou un autre content-type), je rajoute une liste de choix (select) dans grace à form_alter.
Par exemple cette liste peut permettre de choisir un niveau de 1 à 5 en fonction de l'importance de la story ou des noms de personnes associées à la 'story'.

Dans le submit je peux recuperer sans probleme les valeurs choisies dans la liste select.

Malheureusement je veux stocker evidemment cette information des que je clique sur le bouton "submit" ...
Je ne peux pas identifier le formulaire de facon unique ... vu que le node n'est pas encore crée et n a pas encore de 'nid'.

Comment faire pour créer la page vide programmatiquement ?
(on cree une page a l avance ?)
et insérer le form dedans et afficher cette nouvelle page ?

C est comme cela que l on cree la page de maniere programmatique ?

<?php
 
$node
= new StdClass();
       
// Information for base node
       
$node->type = 'rendu_projet'// *** This needs to be a valid content type
       
$node->uid = $user->uid;

       
// Optional - Useful if you want the create date/time to reflect something other than now
        // $node->created = ** Valid unix time stamp

       
$node->status = 1// Set to 0 if you do not want the content published
       
$node->promote = 1// Set to 0 if you do not want the content promoted to the front page
       
$node->sticky = 0// Set to 1 if you do not want the content sticky
       
$node->title = $titre1;
       
$node->body = $body2;
       
$node->teaser = $teaser1;
       
$node->language = 'fr';
       
$node->comment = '2';
       
node_save($node);
       
$nid = $node->nid;
?>

Sinon une autre solution mais qui ne marche que pour l admin, etait d utiliser $form[#node]->created qui renvoie l heure ou le formulaire a été crée ... mais ca renvoie rien qu on est un simple user ...

Tout autre solution est la bienvenue !

Merci d avance

PS : (inutile de dire que je me suis bien casser la tête dessus et que c est urgent :-) )

Re,

J'avoue que j'ai un peu de mal à suivre cette discussion. D'après ton 1er message (luron), je pensais que le module automatic nodetitles fonctionnait, mais que son seul problème, c'était de ne pas afficher le nid dès LA CREATION DE LA PAGE.

En fait, ce que tu as voulu dire, c'est que ce module fonctionne comme tu veux, UNIQUEMENT SI TU RE-EDITES LA PAGE après l'avoir créée et enregistrée ? (autrement dit, si tu te contentes de la créer simplement, il ne marche pas). C'est ça ?

Bon je pense que je l'ai:
Dans le module , remplace la fonction auto_nodetitle_nodeapi par

<?php
function auto_nodetitle_nodeapi(&$node, $op, $form = NULL, $a4 = NULL) {
  if ((
$op == 'insert' || $op == 'update') && variable_get('ant_'. $node->type, 0)) {
   
auto_nodetitle_set_title($node);
   
//form_set_value($form['title'], $node->title);
   
db_query("UPDATE {node} SET title = '%s' WHERE nid = %d", $node->title, $node->nid);
   
db_query("UPDATE {node_revisions} SET title = '%s' WHERE vid = %d", $node->title, $node->vid);
  }
}
?>

J'ai enleve les commentaires.

Basiquement la seule difference que j'ai ici est que le titre est mis a jour apres l'insert/update d'un node.

Curieusement si le titre est vide il n'a pas bronche ;), du coup je fais un update apres coup et ca marche nickel.

A tester un peu plus cependant ;)

PS: c'est la ruse utilisee par pathauto qui cree l'alias une fois que le node est cree donc ca devrait marcher tout le tps.

Merci beaucoup tostinni, ta modification fonctionne bien pour le titre de la page (le nid est inséré). Mais l'adresse URL est toujours ant (et ant-0, ant-1, etc. pour les pages suivantes). Je peux régler le problème en utilisant pathauto pour l'adresse, mais je me demandais si ça faisait ça pour toi aussi ou si ce n'était pas normal...

Merci! :)

Perso l'adresse restait "node/nid" donc a priori ma modif ne change rien.
D'ailleurs en jettant un oeil ds le module, il n'est pas sense modifie le "path".
T'es sur que t'as pas un autre module qui affecte le path ?

A mon avis y a ptet un conflit entre pathauto et ant, car pathauto doit vouloir recuperer le titre pour l'alias alors qu'il est pas defini...

Bref comme je te dis ce patch que j'ai fait est qd meme experimental...