Submitted by daneel on
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.
Hum. Pas facile! Je pense
Permalien Soumis par Damien Tournoud le 28 Octobre, 2006 - 22:55
Hum. Pas facile!
Je pense que l'association de taxonomy_lineage et de la vue "views_bonus_lineage_tree" définie dans le View Bonus Pack peut s'approcher de ce que vous recherchez.
Hum. Est-ce que j'ai déjà dis que c'était pas facile?
Tout d'abord, merci beaucoup
Permalien Soumis par daneel le 29 Octobre, 2006 - 11:28
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:
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:
Salut, tu as réussi
Permalien Soumis par Dawa le 16 Août, 2007 - 21:53
Salut,
tu as réussi finalement ?, parce que ça m'intéresse aussi.
Salut, bon ben, j'ai trouvé
Permalien Soumis par Dawa le 17 Août, 2007 - 13:25
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>";
?>