Récupérer le $node->type dans une fonction de template

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 à tous,

J'ai tout dit dans le titre.

J'ai une fonction dans mon template.php et j'aimerai avoir une class différente pour deux types de node qui s'affichent dans la même page

Du genre :

if($node->type=="truc"){$cssclass="node-truc";}
if($node->type=="machin"){$cssclass="node-machin";}
$output="<div class=....

Seulement voilà, je n'arrive pas à récupérer l'objet $node...

C'est vraiment newby cette question mais j'en suis là de mon apprentissage ;o))

Salut à tous et toutes
Serge

Forum : 

Bonjour,

Non je ne suis pas dans un fichier de template mais dans le fichier template.php qui gère les fonctions de template.

ma fonction de template vient de ds (display suite) et est ainsi faite

function montheme_ds_field($content, $field) {
  
  $output = '';
  if (!empty($content)) {
    if ($field['type'] == 'ds') {
      $output .= '<div class="field '. $field['class'] .'">';
      // Above label.
      if ($field['labelformat'] == 'above') {
        $output .= '<div class="field-label">'. $field['title'] .' :  </div>';
      }
      // Inline label
      if ($field['labelformat'] == 'inline') {
        $output .= '<div class="field-label-inline-first">'. $field['title'] .' :  </div>';
      }
      $output .= $content;
      $output .= '</div>';
    }
    else {
      $output = $content;
    }
  }

  return $output;
}

j'aimerai charter le champ selon le node qui la contient avec un truc du genre

function montheme_ds_field($content, $field) {
   if($node->type == 'proposition'){$class="coucou";}else{$class="toto"}

et ainsi faire un div avec une classe que je pourrai alimenter avec mon CSS.

Bonsoir et merci
Serge

J'ai mis un peu trop de temps à faire mon message.

Réponds d'abord à la question de mbehmane.

Tu peux faire :

$node = node_load(arg(1));

if ($node->type == 'truc') {
  $cssclass = 'node-truc';
}
if ($node->type == 'machin') {
  $cssclass = 'node-machin';
}

$output = '....

La fonction arg() http://api.drupal.org/api/function/arg/6 permet de récupérer les arguments du path.

La fonction node_load() http://api.drupal.org/api/function/node_load/6 charge le node en objet.

Bonjour,

OK, je n'avais pas compris.
En fait, c'est le module d-s qui gère la fonction elle est appelée dans ce module.
Mais je n'ai pas le temps de fouiller plus avant car j'ai trouvé la solution : "display suite" est vraiment formidable car on peut créer des styles pour chaque champ.
Donc, je n'ai plus besoin de cette fonction.

Je te remercie néanmoins.

Cordialement

Serge