afficher un vocabulaire specifique dans un node?? [résolu]

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, pour un gain de place de mes teasers j'aimerais afficher que les 2 premiers termes du node dans le teaser de celui ci.

j'ai testé

<?php
 
print substr($terms, 0, 33).'...'
?>

pour limiter à 33 lettres mais cela ne fonctionne pas (cela fonctionne pourtant avec le titre du node.

Une idée ??

merci

Forum : 
Version de Drupal : 

Salut, le titre ne contient que du texte, tu peux donc l'interrompre où tu veux. En revanche, la variable $terms contient du texte ET du code HTML.

Donc : 1) il faut tenir compte de ce HTML dans la longueur de la chaîne (tu ne vois pas les balises, mais elles prennent un certain nombre de caractères) ; 2) tu risques de couper la chaîne en plein milieu d'une balise ou de supprimer les balises fermantes...

Pour résoudre ton problème, le plus simple est de supprimer le HTML de la chaîne $terms (mais les termes ne seront plus cliquables) :

<?php
print substr(strip_tags($terms), 0, 33) .'...';
?>

Cela dit, c'est une bidouille. La méthode propre serait de redéfinir la variable $terms dans template.php de sorte qu'elle ne contienne QUE les 2 premiers termes.

Super !
Ce n'est pas grave que les termes ne soient plus cliquables car c'est juste dans le teaser. Cela informe les membres comme il se doit.

Par contre, la class css ou le style css n'est pas pris en compte..
Je flanche dessus en attendant de voir si il y a une autre aide.

Une autre idée serait d'afficher que le terme d'un certaine categorie.. mais la, je cherche mais ne trouve pas.

Merci beacoup pour ta rapidité !
jubjub

humm, je comprend pas vraiment ce module. rien dans le setting, rien dans le read me...a voir

J'ai trouvé ceci qui permet d'afficher les terms par categorie :

<?php
            $vocabs
= array();
           
/** save $links array in other variable before the following code changes it  
            */
           
$comment = $links;

            foreach( (array)
$node->taxonomy as $term ) {
               
$vocab = taxonomy_get_vocabulary($term->vid);
                if ( !isset(
$vocabs[$vocab->name]) ) {
                   
$vocabs[$vocab->name] = array();
                }
               
$vocabs[$vocab->name][] = l($term->name, "taxonomy/term/$term->tid");
            }

            foreach (
$vocabs as $name => $links ) {
              print
'<div class="taxonomy">' . $name . ': ';
              print
implode(', ', $links);
              print
'</div>';
            }
       
?>

cela donne un truc du genre :

-Marque : honda
-année : 1980
-couleur : rouge

Cela va peut etre m'eclairer et vous eclairer pour m'aider a afficher qu'une seule sorte de catégorie, par exemple, que la marque.

Ben si tu es prêt à faire du code, pas de souci. Tous les termes de taxo d'un node se trouvent dans la variable $node->taxonomy. En faisant une boucle sur cette variable, tu ne peux retenir que les termes appartenant au vocab qui t'intéresse.

Supposons que tu veuilles tous les termes du vocab 18 !

<?php
foreach ($node->taxonomy as $term) {
  if (
$term->vid == 18) $myterms[] = $term;
}
// Ici, la variable $myterms contient les termes que tu veux
?>

ca ne fonctionne pas chez moi mais bonne nouvelle, j'ai trouvé ceci qui fonctionne tres bien :

<?php
$firstterm
= 0;
foreach ((array)
taxonomy_node_get_terms_by_vocabulary($nid, 2, $key = 'tid') as $term) {
  if (
$firstterm > 0 ) {
    print
", ";
  }
  print
"<a href="" . taxonomy_term_path($term) . "">$term->name</a>";
 
$firstterm++;
}
?>

Choisir le vocabulaire en inscrivant son numéro ici :
[...]vocabulary($nid, 2[...]