[résolu]récupérer un terme de taxonomie sans que ce soit un lien

Bonjour,

je souhaite afficher le terme de taxonomie de mon noeud dans le titre de ma page mais sans que cela soit un lien

pour l'instant, j'en suis là mais ça ne marche pas.

<h2 class="title node-title">
Bras&nbsp;
            <?php
        $termes
= taxonomy_node_get_terms($nid); 
            foreach (
$termes as $terme) { 
          
$leterme = $terme->name
        }
            echo
$leterme." ".$title;
       
?>

</h2>

merci d'avance

[edit : sujet déplacé dans la section développement]

#

Y’a du développement dans la section support, du support dans le développement, c’est un grand souk ici :)

Déjà, le paramètre de taxonomie_node_get_termes n’est pas un nid, mais l’objet node. J’imagine que tu procèdes dans le fichier node.tpl.php donc tu peux remplacer $nid par $node.

Ensuite, cette fonction renvoie un tableau d’objets «term». Donc là tu essayes d’imprimer un objet, marchera pas. Remplace par $leterme->name

Yoran - arNuméral

#

merci ça marche, fallait juste que je remplace le $nid par $node. je remet le code, je pense qu’il est largement optimisable mais ça marche.

<?php
$termes
= taxonomy_node_get_terms($node); 
    foreach (
$termes as $terme) { 
       
$leterme = $terme->name
  }
echo
$leterme." ".$title;
?>

#

Juste pour la beauté du geste, ce sera plus joli de mettre ce code dans une variable par ton fichier template.php

<?php

function phptemplate_preprocess_node (&$variables) {
   
$termes = taxonomy_node_get_terms($node);
    foreach (
$termes as $terme) {
       
$variables['mon_terme'] = $terme->name;
        break;
    }
}
?>

Et dans ton node.tpl.php, tu n’as plus qu’à utilise $mon_terme.

Yoran - arNuméral

#

merci j’aime bien faire du code propre, pour moi et pour les autres.

#

C’est exactement ce que je recherchais depuis un moment ! Parcontre je n’arrive pas à utiliser le code qui passe par la fonction.

J’ai ajouté la fonction dans template.php mais ça ne marche pas, je ne comprend pas pourquoi. Pouvez-vous m’aider svp ? Merci d’avance.

#

sans rien se mettre sous la dent difficile de dire ce qui ne va pas

#

J’ai ajouté ce code dans template.php (en fin de page, juste avant ?>)

<?php
function phptemplate_preprocess_node (&$variables) {
   
$termes = taxonomy_node_get_terms($node);
    foreach (
$termes as $terme) {
       
$variables['mon_terme'] = $terme->name;
        break;
    }
}
?>

et sur ma page mapage-node.tpl.php j’ai ajouté :

<?php
print ($mon_terme)
?>

En utilisant ton code directement dans mapage-node.tpl.php je trouve bien le terme de la taxonomie sans lien mais si je pouvais passer par la fonction sa serait plus propre.

Merci pour ton aide.

#

Pas d’idée pourquoi sa ne marcherais pas ?

#

Tu utilises bien la version 6 de Drupal ?

Sinon, la raison classique est que la fonction n’est pas prise en compte à chaque construction de la page. Pour que ça soit le cas, il faut reconstruire la theme registry. Une méthode simple est d’ouvrir un onglet sur la page de gestion des thèmes et de faire F5 pour reconstruire la registry.

Yoran - arNuméral

#

Bonjour,

je me suis interressé à cette discussion, mais j’ai repris les memes codes, mais seul la variable $title qui s’affiche, $mon_terme ou meme la variable $leterme pour l’autre cas de code n’a pas de contenu.

j’ai pris ce code ayant la fonction, que j’ai mis dans template.tpl.php et la variable $mon_terme dans le node.tpl.php selon ce qui est dit ci-haut

autres choses,étant debutant avec drupal, j’ai du mal à saisir les fonction se trouvant dans le fichier template.tpl.php et comment en créer un mien en fonction de mes besoins

Merci pour votre lecture

Quelque soit la difficulté rencontrée, le calme montre la grandeur de l’esprit génie de la programmation !

#

J’utilise bien drupal 6, mon cache est désactivé. J’ai testé en modifiant la fonction :

<?php
function phptemplate_preprocess_node(&$variables) {
   
$termes = taxonomy_node_get_terms($node);
    foreach (
$termes as $terme) {
       
$variables['mon_terme'] = $terme->name;
        break;
    }


   
$variables['mon_terme'] = 'Test';//$terme->name;

}
?>

J’obtiens bien «Test», ça veut surement dire que je ne rentre pas dans la boucle, pourtant ma page contient bien des termes.

——Edition——

Je viens d’arriver au même résulta en modifiant la boucle, je ne sais pas si c’est le top mais ça marche…

<?php
function phptemplate_preprocess_node(&$variables) {
    foreach(
$variables['node']->taxonomy as $term ) {
       
$variables['mon_terme'] = $term->name;
    }
}
?>

——Edition——

Une toute dernière question, si il y a plusieurs termes dans mon noeud, je suis obligé de faire comme celà pour arriver à les afficher :

<?php
function phptemplate_preprocess_node(&$variables) {
    foreach(
$variables['node']->taxonomy as $term ) {
       
$i++
       
$variables['mon_terme' . $i] = $term->name;
    }
}
?>

Merci pour ton aide !

#

Bon ben je suis un âne car je n’avais pas vu que tu utilisais un $node qui n’existe effectivement pas dans ce contexte, donc logique que tu n’obtiennes rien. Ta modification est la bonne approche.

Pour avoir tout les termes, ton approche n’est pas très pratique. Tu peux tout aussi bien faire un

<?php
$variables
['termes']=$variables['node']->taxonomy;
?>

Comme cela tu disposeras du nombre d’éléments dans ton template.

Yoran - arNuméral

#

Pas de soucis, c’est déjà gentil de m’aider.

En faite, je me suis mal exprimé tout à l’heure quand j’ai dis que je voulais récupérer tous les termes. Ce que j’aimerais c’est de pouvoir les récupérer un par un. par exemple en utilisant $terme[1], $terme[2]. Enfin bon c’est un détail donc c’est pas grave.

Par contre le bout de code que tu m’as donné ne marche pas ou je l’ai mal placé car je me retrouve avec un «Array».

#

Si mes souvenirs sont exactes, le tableau que tu récupères est associatif (avec l’id du terme comme clef). Si tu utilises la fonction arrar_values tu devrais obtenir un tableau de type $terme[0], $terme[1], etc…

Yoran - arNuméral

#

J’ai essayé avec array et aussi array_value comme tu me là conseillé mais je n’arrive pas à récupérer ce que je veux, si je met le tableau directement dans mon noeud sa marche par contre si je le met dans ma fonction, impossible de récupérer mes valeurs dans mon noeud.

Enfin, j’ai quand même trouvé une autre solution qui marche :

<?php
function phptemplate_preprocess_node(&$variables) {     
foreach(
$variables['node']->taxonomy as $term ) {
    
$i++;
     
$variables['terme'][$i] = $term->name;
    }
}
?>

Syndiquer le contenu