[Workflow] afficher l'état dans le titre

Catégories:

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.

#

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

Syndiquer le contenu