Comment pouvez-vous trier les termes de taxonomie en fonction du nombre de fois utilisés, dans une vue?


8

Je crée une vue qui répertorie les 10 termes de taxonomie (balises) les plus populaires. Actuellement, la vue renvoie tous les termes et je peux limiter la vue à 10, mais je ne peux pas déterminer comment classer les termes par popularité (c'est-à-dire le nombre de fois utilisé sur tous les nœuds).

Quelqu'un en a-t-il l'expérience?

Réponses:


9
  1. Créer une nouvelle vue
  2. limite aux taxonomies "afficher les taxonomies du terme tout"
  3. Ajouter une relation "Terme de taxonomie: contenu avec terme"
  4. Utiliser l'agrégation
  5. Ajouter un champ "Contenu: Titre"
  6. Type d'agrégation "Count"
  7. Remplacez le libellé par quelque chose comme "nombre de fois utilisé"
  8. Ajouter des critères de tri "Contenu: Titre"
  9. Type d'agrégation "Count"
  10. Triez ce que vous voulez

ça devrait ressembler à ça:

la vue le résultat


Je pense que cela fonctionne correctement, votez pour
Yuseferi

Fonctionne toujours avec Drupal 8!
Insasse

ce moment gênant lorsque vous recevez une notification de SE et que vous lisez votre propre réponse d'il y a 7 ans et que vous dites "wow, qu'est-ce que je dis?"
saadlulu

0

Views 3 a une fonctionnalité (très bêta) "group by"; vous devriez pouvoir l'utiliser et commander un champ de comptage.

Je ne garantirais pas que cela fonctionne, mais cela vaut probablement la peine d'essayer.


J'ai essayé et essayé et je n'ai pas pu le faire fonctionner. :-(
Camsoft

Désolé d'entendre cela, je l'ai fait fonctionner avec quelque chose dans le passé, mais j'étais limité par le fait qu'il n'utilisait pas les champs CCK. Il y arrive mais pas encore.
Jeremy French

Le "très bêta" devrait suffire pour ne pas considérer cela comme une réponse :) -1, car le fait que la réponse pointe vers une solution qui est (encore) connue pour avoir des défauts, est instable et ne fonctionnera plus alors fonctionnera .
berkes

il est toujours utile pour moi de savoir que Views 3 devrait pouvoir le gérer bientôt. Merci pour les clarifications!
uwe

0

À la fin, j'ai créé mon propre module personnalisé pour obtenir les termes de la base de données et les regrouper / trier.

Veuillez noter que j'ai légèrement modifié le code ci-dessous pour publication et que je n'ai pas testé la version modifiée. Il convient également de noter qu'il a été écrit pour un site utilisant PostgreSQL, mais il devrait fonctionner avec MySQL.

/**
  * Implements hook_block_info().
  */
function MYMODULE_block_info() {

  $blocks['poptags'] = array(
    'info' => t('Most Popular Tags'),
    'cache' => DRUPAL_NO_CACHE
  );

  return $blocks;
}

/**
  * Implements hook_block_view().
  */
function MYMODULE_block_view($delta = '') {
  $block = array();

  switch ($delta) {
    case 'poptags':
      $block['subject'] = t('Most Popular Tags');
      $block['content'] = _MYMODULE_popular_terms();
      break;
  }
  return $block;
}

function _MYMODULE_popular_terms() {

    $vocabId = 1;

    $links = array();
    $results = db_query_range('SELECT taxonomy_term_data.tid, taxonomy_term_data.name, count(taxonomy_term_data.tid) AS times_used FROM taxonomy_term_data INNER JOIN taxonomy_index ON taxonomy_term_data.tid = taxonomy_index.tid WHERE taxonomy_term_data.vid = :vid GROUP BY taxonomy_term_data.tid, taxonomy_term_data.name ORDER BY times_used DESC', 0, 10, array(':vid' => $vocabId));
    foreach ($results as $term) {
        $links['term-link-' . db_escape_field($term->name)] = array('title' => $term->name, 'href' => drupal_get_path_alias('taxonomy/term/' . $term->tid));
    }

    return theme('links', array('links' => $links, 'attributes' => array('class' => 'term-links')));
}

N'oubliez pas de changer MYMODULEle nom de votre module. Enfin, changez la $vocabId = 1ligne de la _MYMODULE_popular_termsfonction pour la vid (id de vocabulaire) du vocabulaire dont vous souhaitez répertorier les termes.

Notez que c'est uniquement pour Drupal 7, mais il ne faudrait pas beaucoup de temps pour le porter sur Drupal 6.


0

Vous pouvez extraire les données de tagadelic .

$output = '';
$vids = array(1, 2, 3, 4); #Taxonomy vocabulary-ids you want to be included.
$top_tags = tagadelic_get_weighted_tags($vids, 6, 10);
foreach ($terms as $term) {
  $weight = $term->weight;
  $output .= l($term->name, drupal_get_path_alias('taxonomy/term/' . $term->tid), array(
    'attributes' => array(
      'class' => array("tagadelic", "level$weight"),
      'rel' => 'tag',
      'title'  => $term->description,
      )
    )
  ) . " \n";
}

return $output;

Le seul inconvénient est que tagadelic ajoute quelques frais généraux mineurs pour calculer le "poids", généralement pour présenter les tailles de balises, que vous n'utiliserez pas.

L'avantage est que vous obtenez la mise en cache gratuitement.


Je pense que ma solution a probablement le moins de frais généraux, car ce n'est qu'une simple requête. La question concernait également Drupal7 et Tagadelic n'a pas de version d7.
Camsoft
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.