Afficher une listes de termes triés par vocabulaire

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 tout le monde,

J'ai un site sur Drupal 4.7 et le module taxonomy est activé. J'ai plusieurs vocabulaires et je voudrais afficher une page listant tous les vocabulaires, et à l'intérieur de chaque vocabulaire tous les termes avec pour chaque terme le nombres de nodes d'un certain type avec le terme en question.

En gros, ce à quoi je cherche à arriver, c'est ce genre de layout:

|===============================================|
| Flowers | => vocabulary name
| A flower is a nice plant. | => vocabulary description
|-----------------------------------------------|
| Rose | 9 posts | => Vocabulary term (link) and number of nodes
|-----------------------------------------------|
| Tulip | 15 posts |
|===============================================|
| Animal |
| An animal is like a living and moving |
|-----------------------------------------------|
| Lion | 10 posts |
|-----------------------------------------------|
| Dog | 6 posts |
|===============================================|

Quelqu'un aurait-il une idée de comment on peut faire ça sans trop mettre les mains dans le code? Avec le module views peut-être (j'ai essayé mais sans succès)?

Merci d'avance pour vos idées.

Tout d'abord, merci beaucoup pour votre aide.

En fait, j'ai réussi à obtenir presque ce que je voulais avec la vue suivante:

  $view = new stdClass();
  $view->name = 'discussions';
  $view->description = 'Nested, hierarchical taxonomy view. Select a branch in the first argument to view only that branch.';
  $view->access = array (
);
  $view->view_args_php = '';
  $view->page = TRUE;
  $view->page_title = 'Discussions';
  $view->page_header = '<ul>\r\n<li>\r\n<a href="node/add/flexinode-6">Start a new discussion</a>\r\n</li>\r\n</ul>';
  $view->page_header_format = '1';
  $view->page_footer = '';
  $view->page_footer_format = '1';
  $view->page_empty = '<h3>Sorry, no discussion on this topic.</h3>';
  $view->page_empty_format = '1';
  $view->page_type = 'table';
  $view->url = 'discussions';
  $view->use_pager = TRUE;
  $view->nodes_per_page = '999';
  $view->menu = TRUE;
  $view->menu_title = 'discussions';
  $view->menu_tab = FALSE;
  $view->menu_tab_default = FALSE;
  $view->menu_weight = '';
  $view->sort = array (
  );
  $view->argument = array (
    array (
      'type' => 'vocid',
      'argdefault' => '6',
      'title' => '%1',
      'options' => '',
      'wildcard' => '',
      'wildcard_substitution' => '',
    ),
    array (
      'type' => 'taxid',
      'argdefault' => '6',
      'title' => '%2',
      'options' => '2',
      'wildcard' => '',
      'wildcard_substitution' => '',
    ),
  );
  $view->field = array (
    array (
      'tablename' => 'node',
      'field' => 'title',
      'label' => 'Title',
      'handler' => 'views_handler_field_nodelink_with_mark',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'users',
      'field' => 'name',
      'label' => 'Author',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node',
      'field' => 'created',
      'label' => 'Posted',
      'handler' => 'views_handler_field_date_small',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'comment_count',
      'label' => 'Replies',
      'handler' => 'views_handler_comments_with_new',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_timestamp',
      'label' => 'Last comment posted',
      'handler' => 'views_handler_field_date_small',
      'sortable' => '1',
      'defaultsort' => 'DESC',
    ),
  );
  $view->filter = array (
    array (
      'tablename' => 'node',
      'field' => 'status',
      'operator' => '=',
      'options' => '',
      'value' => '1',
    ),
    array (
      'tablename' => 'node',
      'field' => 'type',
      'operator' => 'OR',
      'options' => '',
      'value' => array (
  0 => 'story',
),
    ),
  );
  $view->exposed_filter = array (
  );
  $view->requires = array(node, users, node_comment_statistics);
  $views[$view->name] = $view;

Mais j'ai encore un souci. J'ai deux arguments: le vocabulaire et le terme. Donc quand j'accède à la racine de la vue (discussions) sans spécifier d'arguments, j'obtiens une liste des vocabulaires avec entre parenthèses le nombre de nodes de type story taggés avec l'un des termes de chaque vocabulaire. Quand je clique sur un vocabulaire, ça détermine le premier argument et j'obtiens une liste de termes dans le vocabulaire en question avec toujours le nombre de posts entre parenthèses. Enfin je dois cliquer sur l'un des termes pour afficher la liste des posts avec ce terme.

Moi ce que je cherche à obtenir, c'est d'améliorer l'ergonomie de la chose en réduisant le nombre d'étapes nécessaire pour accéder à la liste de nodes. Donc en fait au lieu d'avoir une liste de vocabulaires à la racine, j'aimerais au moins avoir des listes imbriquées du style:

  • Vocabulaire 1 (11)

    • Terme 1 (5)
    • Terme 2 (8)
  • Vocabulaire 2 (6)
    • Terme 3 (3)
    • Terme 4 (9)

Ma question, c'est comment je peux personnaliser la liste des valeurs possibles pour les arguments? Je suppose que je peux intégrer du code personnalisé dans le "argument handling" mais j'ai beaucoup de mal à comprendre comment ça fonctionne.

Pour la petite histoire, ce que je cherche à faire, c'est remplacer les forums par une vue simplifiée pour:

  • Ne plus être lié au vocabulaire des forums avec son système de conteneurs, qui restreint complètement les possibilités des taxonomies
  • Pouvoir considérer plusieurs types de contenus comme faisant potentiellement partie des forums

Salut,

bon ben, j'ai trouvé comment faire une liste des termes de la taxonomie avec le compteur des nodes référents:
http://drupal.org/node/133445

<?php
  $vid
= 1;         /* <---- put correct vocabulary ID here <em>/
  $terms = taxonomy_get_tree($vid);      /</em> need code from below to handle nesting <em>/
  print "<ul>";
  foreach ( $terms as $term ) {
      $count = db_result(db_query("SELECT COUNT(nid) FROM {term_node} WHERE tid = %d ", $term->tid));
      if ($count) {   /</em> don't show terms with 0 count <em>/
         print "<li>".$term->name." (".$count.")</li>";
       }
   } /</em> end foreach */
 
print "</ul>";
?>