Bonjour,
Je ré-écris l’affichage de mes types de contenus et, pour avoir le nom des variables, j’ai regardé le fichier de base node.tpl.php et /modules/nodes/node.tpl.php.
Cependant je n’ai pas trouvé comment afficher le nom d’un type de contenu (et non pas son type qui est accessible par $type) ? Dans une vue c’est facile mais là je n’ai pas trouvé.
D’autre part, j’aurai voulu savoir comment afficher dans cet article les tags d’une taxonomie. Pour un type de contenu, j’ai par exemple une taxonomie «ville» contenant toutes les villes et une taxonomie «action» représentant des actions faites. Si j’utilise la variable $terms je récupère tous les tags, «ville» et «action» hors je souhaite récupérer uniquement «ville». Savez-vous comment le faire ?
Merci d’avance et bon week.
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Alors pour la première question il suffit d’utiliser la fonction node_get_types() de cette manière :
<?php print node_get_types('name', $node->type); ?>Pour la seconde question il faut créer une fonction spécifique dans votre fichier template.php en remplaçant «montheme» par le nom de votre thème.
<?php
/**
* Imprimer des termes présent sur un noeud d'un vocabulaire
* spécifique.
*
* @param object $node
* Le noeud en cours de visualisation.
* @param integer $vid
* L'id du vocabulaire que l'on souhaite imprimer.
*
* @return string $output
* La taxonomy présente sur le noeud correspondant à ce vocabulaire.
*/
function montheme_taxonomy_specifique($node, $vid) {
$output = '';
if (count($node->taxonomy)) {
$taxonomys = array();
foreach ($node->taxonomy as $taxo) {
if ($taxo->vid == $vid) {
$taxonomys[] = array('title' => $taxo->name, 'href' => taxonomy_term_path($taxo));
}
}
if ($taxonomys) {
foreach ($taxonomys as $taxonomy) {
$output .= l($taxonomys['title'], $taxonomys['href']);
}
}
}
return $output;
}
?>
Et il suffira dans votre fichier tpl.php d’appelée la fonction par exemple si votre vocabulaire à un id de 2 :
<?php print montheme_taxonomy_specifique($node, 2); ?>takeova
356
Je suis un peu dégouté, car j’ai passé la journée à chercher comment le faire. Du coup, voilà ce que j’ai trouvé
1-
<?phpnode_get_types('name',$vars['node']);
?>
2-
<?php function musculation_getVocabularyFromNode($taxonomy=null, $vocabulary_vid=0){
$output = "";
if ($taxonomy && $vocabulary_vid)
{
///-- Cette fonction est un copié-collé de la fonction /modules/taxonomy/taxonomy.module "taxonomy_link"
foreach($taxonomy as $term) {
if ($term->vid == $vocabulary_vid) {//print_r($term->name);
//$output .= $term->name . $separator;
if (is_object($term)) {
$links['taxonomy_term_'. $term->tid] = array(
'title' => $term->name,
'href' => taxonomy_term_path($term),
'attributes' => array('rel' => 'tag', 'title' => strip_tags($term->description)));
}
else {
foreach ($term as $free_typed) {
$typed_terms = drupal_explode_tags($free_typed);
foreach ($typed_terms as $typed_term) {
$links['taxonomy_preview_term_'. $typed_term] = array('title' => $typed_term, );
}
}
}
drupal_alter('link', $links, $node);
}
}
//-- Affiche sous forme de lien les tags
$output .= theme_links($links, array('class' => 'tags_content_type')) ;
}
return $output;
}
?>
J’ai repompé le code et modifié de la fonction taxonomy_link.
Tu en penses quoi par rapport à ton code ?
drupal974
408
Pour le 1 on à la même chose, cependant pour la 2 il est plus économique d’utilisée la snippet que je vous ai donnée car celle-ci ne fait pas appelle à drupal_alter() qui à déjà été appelée une fois avant l’affichage du noeud mais sinon c’est à peu près la même chose.
takeova
356
Par rapport à votre réflexion, j’ai supprimé la ligne
<?phpdrupal_alter('link', $links, $node);
?>
et ça fonctionne quand même.
Dans la doc, il est écrit au sujet de cette fonction This dispatch function hands off structured Drupal arrays to type-specific *_alter implementations. It ensures a consistent interface for all altering operations.
Je ne comprends pas, à quoi sert cette fonction ?
Merci d’avance
drupal974
408
@takeova j’ai pris ton code, mais la taxonomie ne s’affiche pas,j’ai pourtant la bonne vid..j’utilise par ailleurs un autre code pour styler la taxonomie, mais dans ce node j’ai un tpl spécifique qui ne l’utilise pas, voici le code qui me permet de styler,peut etre peut on utiliser ce style sur ton code aussi :
<?php// permet de trier la taxonomie
function monTheme_print_terms($node, $vid = NULL, $ordered_list = TRUE) {
$vocabularies = taxonomy_get_vocabularies();
if ($ordered_list) $output .= '<ul>'; //checks to see if you want an ordered list
if ($vid) { //checks to see if you've passed a number with vid, prints just that vid
$output = '<div class=tags-'. $vid . '>';
foreach($vocabularies as $vocabulary) {
if ($vocabulary->vid == $vid) {
$terms = taxonomy_node_get_terms_by_vocabulary($node, $vocabulary->vid);
if ($terms) {
$links = array();
$output .= '<span class=only-vocabulary-'. $vocabulary->vid . '>';
if ($ordered_list) $output .= '<li class=vocabulary-'. $vocabulary->vid . '>' . $vocabulary->name . ': ';
foreach ($terms as $term) {
$links[] = '<span class="term-' . $term->tid . '">' . l($term->name, taxonomy_term_path($term), array('rel' => 'tag', 'title' => strip_tags($term->description))) .'</span>';
}
$output .= implode(', ', $links);
if ($ordered_list) $output .= '</li>';
$output .= '</span>';
}
}
}
}
else {
$output = '<div class="tags">';
foreach($vocabularies as $vocabulary) {
if ($vocabularies) {
$terms = taxonomy_node_get_terms_by_vocabulary($node, $vocabulary->vid);
if ($terms) {
$links = array();
$output .= '<ul class=vocabulary-'. $vocabulary->vid . '>';
if ($ordered_list) $output .= '<li class=vocabulary-'. $vocabulary->vid . '>' . $vocabulary->name . ': ';
foreach ($terms as $term) {
$links[] = '<span class="term-' . $term->tid . '">' . l($term->name, taxonomy_term_path($term), array('rel' => 'tag', 'title' => strip_tags($term->description))) .'</span>';
}
$output .= implode(', ', $links);
if ($ordered_list) $output .= '</li>';
$output .= '</ul>';
}
}
}
}
if ($ordered_list) $output .= '</ul>';
$output .= '</div>';
return $output;
}
?>
et dans le node.tpl j’ai :
<?phpprint monTheme_print_terms($node);
?>
Drupal 6.xx - 2 sites chez OVH (pro) mutualisé, 6 chez AlwaysData (Pack10go)
/////////////
www.graphisme-libre.info
aiphes
1045
Je comprend pas quel est le problème que tu cherche à résoudre cependant dans ton code je pense que tu fais appel à des fonction dont tu n’as pas besoin et qui peuvent laisser une empreinte plus importante sur la mémoire du genre taxonomy_node_get_terms_by_vocabulary().
takeova
356
fort possible en effet,je vais faire le menage
Drupal 6.xx - 2 sites chez OVH (pro) mutualisé, 6 chez AlwaysData (Pack10go)
/////////////
www.graphisme-libre.info
aiphes
1045
remontée de sujet d’outre tombe :)
car j’ai fait un emodif sur mon page.tpl et je n’arrive plus à afficher ma taxo..
j’ai remplacé
<?php//print $content;
?>
par
<?phpprint $node->content['body']['#value']
?>
du coup je dois modifier le code d’origine, mais je ne sais pas comment, voila ce que j’essai sans succés :
<?phpprint Cyrano_PF_print_terms($node->taxonomy[0]]['view']);
?>
si quelqu’un passe par la ;) merci
Drupal 6.xx - 2 sites chez OVH (pro) mutualisé, 6 chez AlwaysData (Pack10go)
/////////////
www.graphisme-libre.info
aiphes
1045
Et ça donne quoi si tu fais un print_r($node->taxonomy) ?
Bon courage !
PS : bizarre ton nom de type de contenu :-)
drupal974
408
voici le resultat :
[44] => stdClass Object(
[tid] => 44
[vid] => 3
[name] => Bac Technologique
[description] =>
[weight] => 0
)
[30] => stdClass Object
(
[tid] => 30
[vid] => 2
[name] => Célony
[description] =>
[weight] => 0
)
Drupal 6.xx - 2 sites chez OVH (pro) mutualisé, 6 chez AlwaysData (Pack10go)
/////////////
www.graphisme-libre.info
aiphes
1045