[Workflow] afficher l'état dans le titre

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,

vu qu'il n'existe pas (encore) de possibilité d'afficher l'état d'un worflow dans l'affichage du node, j'aimerai créer un hook permettant à la fois de notifier cet état dans le titre, ainsi que modifier le style du node pour l'identifier par un fond de couleur.

si j'arrive à lire dans la base les infos dont j'ai besoin,
je n'arrive pas à mon grand damn à trouver, clairement, la fonction d'affichage des nodes et/où l'endroit où poser ce hook.

merci par avance pour votre aide,
je ne demande pas forcément une solution toute faite,
surtout des directions.

merci par avance,
je vous ferai part de mon avancement.

Forum : 
Version de Drupal : 

Bonjour maosalia,

Il y a en fait deux questions différentes :

  • Comment récupérer l'état du workflow d'un node particulier. A regarder le code du module workflow, il semble que cet état soit inséré dans $node->_workflow par la fonction workflow_nodeapi(). Le module fait donc tout pour nous.
  • Comment changer l'affichage du node en fonction de l'état du workflow. De deux choses l'une :
    • soit vous voulez ajouter un champ dans l'affichage du node. On peut faire ça par le hook_nodeapi() et plus précisement l'opération 'view' (voir http://api.drupal.org/api/function/hook_nodeapi/5)
    • soit vous voulez changer l'affichage complet du node. Cela se fait en modifiant la fonction [theme]_node ou le fichier node.tpl.php du thème que vous utilisez.

Damien

Merci Damien!

On peut aussi passer par la fonction preprocess_node de template.php et $node->_workflow devient $vars['node']->_workflow

J'ai fait ça en récupérant le nom de chaque état (voir module workflow) :

  if (!empty($vars['node']->_workflow)) {                 // si workflow
    $result = db_query("SELECT sid, state FROM {workflow_states} WHERE status = 1 ORDER BY sid");
    while ($data = db_fetch_object($result)) {
      $states[$data->sid] = $data->state;                 // récupérer les noms
    }
    $vars['state'] = $states[$vars['node']->_workflow];   // nom état courant
  } else {                                               
    $vars['state'] = '';                                 
  }

Reste plus qu'à faire afficher la nouvelle variable $state dans node.tpl.php